Bash 脚本,用于从非结构化 JSON 文件中提取所有特定键值



我试图从以下 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 ,以避免向输出流添加不需要的引号(。

  1. 您的过滤器.tags[] | .["image_id"]

有效,但可以缩写为:

.tags[] | .image_id

甚至:

.tags[].image_id
  1. 如果你想要与"image_id"键关联的值,无论该键出现在何处,都可以使用:

    .. | objects | select(has("image_id")) | .image_id

或者,如果您不介意丢弃 false 和 null 值:

.. | .image_id? // empty

相关内容

  • 没有找到相关文章

最新更新