使用jq从JSON输出中提取特定字段

时间:2016-08-30 13:13:11

标签: json jq

我有一个JSON输出如下:

{
  "example": {
    "sub-example": [
      {
        "name": "123-345",
        "tag" : 100
      },
      {
        "name": "234-456",
        "tag" : 100
      },
      {
        "name": "4a7-a07a5",
        "tag" : 100
      }
    ]
  }
}

我想提取三个“name”字段的值并将其存储在三个变量中。

我尝试cat json_file | jq '.["example.sub-example.name"]'提取“名称”字段的值,但这不起作用。

有谁能告诉我如何使用jq(或其他方法)来实现这个目标?

3 个答案:

答案 0 :(得分:36)

如果您只想提取name字段,那么您要查找的命令是jq '.example."sub-example" | .[] | .name'。如果要将名称保留在数组中,请将整个jq表达式包装在方括号中。

答案 1 :(得分:13)

在jq 1.3中,您可以使用过滤器:

.example["sub-example"] | .[] | .name

或更紧凑:

.example["sub-example"][].name

这些当然也适用于更高版本的jq。

答案 2 :(得分:1)

已经有几年了,最近我不得不自己做这件事,以为我应该在这里发布另一种方式。

您还可以使用 <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>com.googleusercontent.apps.433638145101-40qg2d9uiq4v5t*********</string> <string>twitterkit-mmjB8lbQe3wsBhx*********></string> </array> </dict> 提取特定字段。例如

map()

参考:https://jqplay.org/s/N6TboUkELM