Проверьте, есть ли в ответе ошибка - PullRequest
0 голосов
/ 01 июня 2018

У меня есть некоторый веб-API, который отвечает с JSON, и сценарий оболочки, который отправляет запросы с curl и обрабатывает JSON с jq.

Структура ответа следующая:

  • Ответ об ошибке: { "error": "error_message" } - одна структура.
  • Хороший ответ: [ { "element1": "value1", "element2": "value2", "element3": "value3" } ] - массив структур из 3 элементов (фиксированное количество).

Проблема заключается в том, что пользователь можетвведите некоторые данные, вызывающие ответ API с ошибкой.В этом случае я не смогу обработать ответ, поскольку есть другая структура.

Я пытался проверить, является ли это ошибкой с echo ${json} | jq '. | select (.| has("error")) | has("error")', но это работает, только если это ответ об ошибке, если он "хороший" - jq завершается неудачей.

Что мне делатьделать?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Вы должны рассмотреть вопрос о вызове jq только один раз, в соответствии с:

 if type == "object" 
 then ...
 else ...
 end
0 голосов
/ 01 июня 2018

Если вы знаете, что ответы будут определенного типа (объект против массива), вы можете просто проверить этот тип.

$ <<<"$json" jq 'arrays'  # "good" response
$ <<<"$json" jq 'objects' # "bad" response

При необходимости вы можете добавить дополнительные проверки.

...