给定一个 json 数组,如何使用 jq 按键提取键值列表?
Given a json array, how do I extract a list of key values by key, using jq?
我有一个 json 数组,如下所示:
{
"StackSummaries": [
{
"CreationTime": "2016-06-01T22:22:49.890Z",
"StackName": "foo-control-eu-west-1",
"StackStatus": "UPDATE_COMPLETE",
"LastUpdatedTime": "2016-06-01T22:47:58.433Z"
},
{
"CreationTime": "2016-04-13T11:22:04.250Z",
"StackName": "foo-bar-testing",
"StackStatus": "UPDATE_COMPLETE",
"LastUpdatedTime": "2016-04-26T16:17:07.570Z"
},
{
"CreationTime": "2016-04-10T01:09:49.428Z",
"StackName": "foo-ldap-eu-west-1",
"StackStatus": "UPDATE_COMPLETE",
"LastUpdatedTime": "2016-04-17T13:44:04.758Z"
}
]
}
我希望创建如下所示的文本输出:
foo-control-eu-west-1
foo-bar-testing
foo-ldap-eu-west-1
jq可以做到吗?具体来说,jq 命令行是什么 select 数组中的每个 StackName 并每行输出每个键一个?
$ jq -r '[.StackSummaries[] | .StackName] | unique[]' input.json
foo-bar-testing
foo-control-eu-west-1
foo-ldap-eu-west-1
-r 选项从输出中去除引号。您可能不希望调用 'unique'.
作为参考,如果您想要所有键名:
$ jq '[.StackSummaries[] | keys[]] | unique' input.json
[
"CreationTime",
"LastUpdatedTime",
"StackName",
"StackStatus"
]
jq --raw-output '.StackSummaries[].StackName'
这是另一个解决方案
jq -M -r '..|.StackName?|values' input.json
我有一个 json 数组,如下所示:
{
"StackSummaries": [
{
"CreationTime": "2016-06-01T22:22:49.890Z",
"StackName": "foo-control-eu-west-1",
"StackStatus": "UPDATE_COMPLETE",
"LastUpdatedTime": "2016-06-01T22:47:58.433Z"
},
{
"CreationTime": "2016-04-13T11:22:04.250Z",
"StackName": "foo-bar-testing",
"StackStatus": "UPDATE_COMPLETE",
"LastUpdatedTime": "2016-04-26T16:17:07.570Z"
},
{
"CreationTime": "2016-04-10T01:09:49.428Z",
"StackName": "foo-ldap-eu-west-1",
"StackStatus": "UPDATE_COMPLETE",
"LastUpdatedTime": "2016-04-17T13:44:04.758Z"
}
]
}
我希望创建如下所示的文本输出:
foo-control-eu-west-1
foo-bar-testing
foo-ldap-eu-west-1
jq可以做到吗?具体来说,jq 命令行是什么 select 数组中的每个 StackName 并每行输出每个键一个?
$ jq -r '[.StackSummaries[] | .StackName] | unique[]' input.json
foo-bar-testing
foo-control-eu-west-1
foo-ldap-eu-west-1
-r 选项从输出中去除引号。您可能不希望调用 'unique'.
作为参考,如果您想要所有键名:
$ jq '[.StackSummaries[] | keys[]] | unique' input.json
[
"CreationTime",
"LastUpdatedTime",
"StackName",
"StackStatus"
]
jq --raw-output '.StackSummaries[].StackName'
这是另一个解决方案
jq -M -r '..|.StackName?|values' input.json