JQ: ошибка (при <stdin>: 0): не может перебрать ноль (ноль) - PullRequest
0 голосов
/ 20 февраля 2019

Я работал с вызовом API, чтобы структурировать его в формате JSON, чтобы позже я мог поместить его в базу данных.Тогда код выглядит так:

getPage() {
curl --fail -X GET 'https://api.app.com/v1/test?page=1&pageSize=1000&sort=desc' \
  -H 'Authorization: Bearer 123abc456pickupsticks789' \
  -H 'cache-control: no-cache'  
}

getPage \
| jq -c '.items | .[] | {landing_id: .landing_id, submitted_at: .submitted_at, answers: .answers, email: .hidden.email}' \
  > testpush.json

Когда я запускаю его, он выдает такую ​​ошибку: jq: error (at <stdin>:0): Cannot iterate over null (null)

Я смотрел на такие решения, как this , или этот с этого сайта , и этот ответ.

Казалось, что общим решением является использование ? перед [] и Iпробовал в строке jq внизу, но все равно не работает.Он просто создает пустой файл json.

Я неправильно читаю вынос из этих других ответов и не помещаю свой ? в нужное место?>

1 Ответ

0 голосов
/ 04 марта 2019

Чтобы защитить от возможности того, что .items не является массивом, вы можете написать:

.items | .[]?

или:

.items[]?

или даже более надежно:

try .items[]?

Однако ни один из них не обеспечит защиту от ввода, который является недопустимым JSON.


ps В будущем, пожалуйста, следуйте рекомендациям mcve (http://stackoverflow.com/help/mcve); в данном случае этопомогло бы, если бы вы предоставили иллюстративный фрагмент JSON, основанный на выводе команды curl.

...