Задать вопрос
@TechNOIR

Как экранировать 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)"
}

И не отправляется, потому что кавычки ему не нравятся.
Как-то можно в скрипте еще экранировать перед отправкой?
Триггеры в забиксе смысла нет переделывать потому-что их много и еще будет и следить чтобы они были без кавычек как-то не очень.
  • Вопрос задан
  • 951 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 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)"}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы