jq: error (at <stdin>:0): 无法迭代 null (null)

goo*_*nch 10 jq

我一直在使用 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
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,它会产生此错误: jq: error (at <stdin>:0): Cannot iterate over null (null)

我已经查看了诸如this之类的解决方案,或者this site中的这个解决方案,以及这个响应。

常见的解决方案似乎是?在前面使用 a[]并且我在朝jq底部的行中尝试了它,但它仍然不起作用。它只生成一个空的 json 文件。

我是否误读了其他答案的内容,而不是将我的答案放在?正确的位置?>

pea*_*eak 20

为了防止.items不是数组的可能性,您可以编写:

.items | .[]?
Run Code Online (Sandbox Code Playgroud)

甚至更强大:

try .items[]
Run Code Online (Sandbox Code Playgroud)

这相当于(.items[])?.

总之:

  • try E 相当于 try E catch empty
  • try E 相当于 (E)?

(请注意,表达式.items[]?(.items[])?并不相同。)

但是,这些都不会提供针对无效 JSON 输入的保护。


ps 以后,请遵循 mcve 指南(http://stackoverflow.com/help/mcve);在目前的情况下,如果您根据curl命令生成的输出提供了一个说明性的 JSON 片段,将会有所帮助。