@TechNOIR

Python. Как экранировать json, чтобы корректно отправить его на API?

Всем привет.

Есть в Zabbix простой Python скрипт чтобы отправлять алерты через API:
#!/usr/bin/python

import sys
import requests
url     = sys.argv[1]
body    = sys.argv[2]
body = body.encode(encoding='utf-8')
r = requests.post(url, body)


Вот в body иногда попадает такое:
{
  "text": ":warning: OK - serv1: Service "TrustedInstaller" (Windows Modules Installer) is not running (startup type automatic)"
}


И не отправляется, потому что кавычки ему не нравятся.
Как-то можно в скрипте еще экранировать перед отправкой?
Триггеры в забиксе смысла нет переделывать потому-что их много и еще будет и следить чтобы они были без кавычек как-то не очень.

Спасибо заранее
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Это некорректный json.
Попробуйте почистить регулярками, как вариант:
import re

txt = '''{
    "text": ":warning: OK - serv1: Service "TrustedInstaller" (Windows Modules Installer) is not running (startup type automatic)"
}'''

cleaned_dict = {}
for im in re.findall(r'\"(\w+)\": \"(.*)\"', txt):
  cleaned_dict[im[0]] = im[1].replace('"', "'")
print(cleaned_dict)


{'text': ":warning: OK - serv1: Service 'TrustedInstaller' (Windows Modules Installer) is not running (startup type automatic)"}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
deeplay Новосибирск
от 130 000 ₽
от 130 000 ₽
Enjoy PRO Санкт-Петербург
от 140 000 до 180 000 ₽
27 окт. 2020, в 00:22
2000 руб./за проект
26 окт. 2020, в 23:49
1500 руб./за проект
26 окт. 2020, в 23:46
3000 руб./за проект