Как проверить, что «Невозможно перебрать нуль (ноль)» и вывести указанную пользователем строку, указывающую на ошибку? - PullRequest
0 голосов
/ 24 октября 2019

Я получил следующую ошибку при попытке получить доступ к «а», когда он не существует. Я не хочу "?"поскольку я хочу напечатать некоторую пользовательскую строку, чтобы указать на ошибку. Не могли бы вы показать мне, как это сделать? Спасибо.

$ jq '.a | .[]' <<< '{"a": [1, 2, 3] }'
1
2
3
$ jq '.a | .[]' <<< '{"b": [1, 2, 3] }'
jq: error (at <stdin>:1): Cannot iterate over null (null)
$ jq '.a | .[]?' <<< '{"b": [1, 2, 3] }'

1 Ответ

2 голосов
/ 24 октября 2019

Проверьте, есть ли у ввода a в качестве поля, прежде чем его расширять

if has("a") then .a[] else "error message" end

Или используйте try-catch:

.a | try .[] catch "error message"

Обратите внимание, что "error message" является обычной строкой JSONв вышеприведенных программах, если вы хотите показать пользовательское сообщение вместо Не можете перебрать нуль , но повторить поведение ошибки (например, остановка программы, возврат ненулевого статуса и т. д.), тогда вам нужно что-токак:

.a | try .[] catch error("custom error message")
...