Tooprogram.ru

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка json не определено

Ошибка json не определено

Есть скрипт на питоне, который вызывается Zabbix’ом. Скрипт связывается с oVitr ( REST API ) забирает данные в формате JSON, и возвращает ( по крайней мере, пытается ) срипту, который, в свою очередь , должен вернуть их Zabbix’у.
Сами данные считываются без проблем в любых форматах, пробовал тестить curl’ом — всё отлично.
Далее гадание на кофейной гуще — предполагаю, что когда до данных JSON добирается питоновый декодер, скипт останавливается с ошибкой:

Всё это дело работало, пока хосты не перестроили ( rebuild ) и забыли накатить Zabbix. Устанавливали его в ручную, старые роли Ansible утеряны / недоступны. Всё это происходило без меня, тикетов по пересборке не найти, что именно было сделано. короче, нужно разбираться с тем, что есть. Я не программист, программер, который писал скрипт уволился.

1. SHiSH , 10.02.2019 00:16
Ну хотябы JSON выложил если считаешь что проблема с ним.
2. hrjun , 10.02.2019 00:25
SHiSH

Ну хотябы JSON выложил если считаешь что проблема с ним. [source=26:43387:1]

Сам JSON ( и xml так же ) возвращаются без проблем, каких то проблем с JSON не наблюдается, так же есть онлайн ресурс, где можно проверить JSON на ошибки ( синтаксис и т.д. ) — всё нормально.

Сам JSON сейчас выложить не могу. По ошибке, которая приведена выше, что-то можно сказать о проблеме ?

3. Px , 10.02.2019 03:43
hrjun
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0) [source=26:43387:0]
Издеваетесь над бедной змейкой, подсунули ей пустой файл?

4. dozen , 10.02.2019 05:33
Px

цитата: Издеваетесь над бедной змейкой, подсунули ей пустой файл? [source=26:43387:3]

Да, похоже тело ответа просто банально потеряли где-то в глубинах стека вызовов. А на питончика гонят!

5. hrjun , 10.02.2019 12:28
Px

подсунули ей пустой файл? [source=26:43387:3]

Как уже говорил, курлом все возвращается как нужно.

Да, похоже тело ответа просто банально потеряли где-то в глубинах стека вызовов. [source=26:43387:4]

Ну вот здесь и проблема — что и где именно теряется ?

А на питончика гонят! [source=26:43387:4]

Да ну что Вы, к питону самое глубокое уважение.

УПД.: Не понимаю, как тело скрипта вставить правильно.

Добавление от 10.02.2019 12:41:

Добавил, жуть как неудобно реализованно.

цитата (hrjun): Как уже говорил, курлом все возвращается как нужно.

цитата (hrjun): Ну вот здесь и проблема — что и где именно теряется ?

Я бы «за-printf-ил» подозрительные места куда-ть в лог и посмотрел бы. Может есть способы и лучше — хз.

цитата (hrjun): Добавил, жуть как неудобно реализованно.

Проследи что спускается внутрь метода json, теряется ли в его недрах или сразу неприходит из get_api_response.
Можно просто разпечатать в лог что получает на вход каждая из функций вниз по стеку метода json().

6. vertur , 10.02.2019 17:46
7. hrjun , 10.02.2019 20:35
vertur
Говоря про curl, я имел ввиду, что

curl -X GET -H «Accept: application/json» —cacert cert.cer -u username@internal: passwd https://hostname:443/ovirt-engine/api/hosts/

возвращает ответ без проблем. Вывод засовывал в JSON онлайн валидатор, ошибок не показывает.

Я бы «за-printf-ил» подозрительные места куда-ть в лог и посмотрел бы. [source=26:43387:6]

Это исользовать «print» вместо «return» ?

Добавил, жуть как неудобно реализованно. [source=26:43387:6]

Я имел ввиду, неудобно / не очевидно, как добавить код в пост. Всё время получал plain текст.

Проследи что спускается внутрь метода json, теряется ли в его недрах или сразу неприходит из get_api_response. [source=26:43387:6]

Это тоже самое, что «запринтить» ? Если нет, не могли бы Вы привести пример, на основе скрипта сверху. Если не трудно, конечно.

Спасибо за советы.

цитата (hrjun): Говоря про curl, я имел ввиду, .

Я прекрасно это понял. Тем не менее скрипт качает не прямым вызовом curl, а метод JSONDecodeError внятно сообщает про ошибку.

цитата: Это исользовать «print» вместо «return» ?

Не вместо, а перед.
Но то, про что я говорил подразуемает print не в конце функции, а в начале, первой же строкой в ее теле.
Просто распечатайте в лог нужные аргументы функции при ее вызове и посмотрите на это в дереве вызовов.

цитата: Это тоже самое, что «запринтить» ?

Это не тоже самое, но может использовать print в качестве решения.

цитата: не могли бы Вы привести пример, на основе скрипта сверху. Если не трудно, конечно.

Потом может быть, на этой неделе некогда.

8. vertur , 12.02.2019 18:54
9. dozen , 17.02.2019 17:20
hrjun
Если нет, не могли бы Вы привести пример, на основе скрипта сверху. Если не трудно, конечно.
[source=26:43387:7]

Примерно так. Вместо:

пишем логгирование всего, что у нас есть.

Я бы также задампил полный состав сессии в get_api_response, чтобы знать, откуда читаем.

Судя по твоему коду, JSON просто исчез из сессии. Так что можно предположить, что или сессию неправильную используешь, или она зарезетилась, или вообще сессия в данном сценарии непременима (мне лень разбираться в питонном веб-апи, да и неважно это щас).

Для кода используй (без пробелов между скобками и code):

Читать еще:  Ошибка при запуске приложения 0x0000005
Ссылка на основную публикацию
Adblock
detector