我试图从以下 JSON 文件中的特定键中提取所有值。
{
"tags": [
{
"name": "xxx1",
"image_id": "yyy1"
},
{
"name": "xxx2",
"image_id": "yyy2"
}
]
}
我使用以下代码来获取image_id键值。
echo new.json | jq '.tags[] | .["image_id"]'
我收到以下错误消息。
parse error: Invalid literal at line 2, column 0
我认为 JSON 文件的格式不正确,或者调用 Json 文件的 echo 命令是错误的。
鉴于上述输入,我的预期/期望输出为:
yyy1
yyy2
需要修复什么才能实现这一目标?
当您运行时:
echo new.json | jq '.tags[] | .["image_id"]'
。字符串new.json
- 而不是名为new.json
的文件的内容 - 被馈送到jq
的stdin,因此它试图解析为JSON文本。
相反,请运行:
jq -r '.tags[] | .["image_id"]' <new.json
。直接打开连接到 jq
标准new.json
(并且,使用 -r
,以避免向输出流添加不需要的引号(。
- 您的过滤器
.tags[] | .["image_id"]
有效,但可以缩写为:
.tags[] | .image_id
甚至:
.tags[].image_id
如果你想要与"image_id"键关联的值,无论该键出现在何处,都可以使用:
.. | objects | select(has("image_id")) | .image_id
或者,如果您不介意丢弃 false 和 null 值:
.. | .image_id? // empty