【发布时间】:2019-04-25 01:37:41
【问题描述】:
我试图从以下 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
需要解决什么问题才能做到这一点?
【问题讨论】:
-
是的,使用
cat而不是echo。 -
在对整行或更多行进行代码格式化时,在自己的行上使用 triple 反引号,而不是单个反引号。您不会使用单个反引号获得代码格式或修改的背景颜色(超出写入实际文本的窗口区域)。
-
也就是说,也不要使用
cat。jq '.tags[] | .["image_id"]' <new.json是正确的。不必要地使用catsometimes 几乎是无害的(老实说,这是其中之一),但是当你运行的命令是tail时,养成这个习惯会让你很难受,shuf,或者其他在给定不可搜索的 FD 时效率极低的东西。 -
顺便说一句,在尝试匿名化内容以构建 minimal reproducible example 时,请确保它在语法上仍然足够有效以符合“可验证”标准。当您将数字更改为不带引号的
xxx时,您的输入不再是有效的 JSON,从而使复制器不再是无需更改即可运行的东西。