curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'
上面的命令只会输出如下数值:
"madireddy@test.com"
"2323"
"test"
"02-03-2014-13:41"
"application"
我该如何获取以下类似的关键字名称:
email
versionID
context
date
versionName
要按照原始JSON中出现的顺序获取键,请使用:
jq 'keys_unsorted' file.json
如果您想按字母数字顺序排序密钥,可以使用:
jq 'keys' file.json
完整示例
$ cat file.json
{ "Created-By" : "Apache Maven", "Build-Number" : "", "Archiver-Version" : "Plexus Archiver", "Build-Id" : "", "Build-Tag" : "", "Built-By" : "cporter"}
$ jq 'keys_unsorted' file.json
[
"Created-By",
"Build-Number",
"Archiver-Version",
"Build-Id",
"Build-Tag",
"Built-By"
]
$ jq 'keys' file.json
[
"Archiver-Version",
"Build-Id",
"Build-Number",
"Build-Tag",
"Built-By",
"Created-By"
]
要获取 JSON 中更深层次节点的键:
echo '{"data": "1", "user": { "name": 2, "phone": 3 } }' | jq '.user | keys[]'
"name"
"phone"
你需要使用jq 'keys[]'
。例如:
echo '{"example1" : 1, "example2" : 2, "example3" : 3}' | jq 'keys[]'
将输出一个每行分隔的列表:
"example1"
"example2"
"example3"
结合上面的回答,您想要请求 jq 输出原始结果,因此您的最后一个过滤器应该是:
cat input.json | jq -r 'keys'
来自 jq 帮助文档:
-r output raw strings, not JSON texts;
如果您的输入是一个对象数组,
[
{
"a01" : { "name" : "A", "user" : "B" }
},
{
"a02" : { "name" : "C", "user" : "D" }
}
]
尝试使用:
jq '.[] | keys[]'
将键以CSV格式打印在同一行上:
echo '{"b":"2","a":"1"}' | jq -r 'keys | [ .[] | tostring ] | @csv'
输出:
"a","b"
为了完整性考虑,将值作为csv格式在一行上打印:
echo '{"b":"2","a":"1"}' | jq -rS . | jq -r '. | [ .[] | tostring ] | @csv'
输出:
"1","2"
有趣的是,被接受的答案实际上并没有确切回答这个问题,所以作为参考,这里提供一个真正解决问题的解决方案:
$ jq -r 'keys_unsorted[]' file.json
declare -a MASTER_KEYS_LIST=($(jq -r 'keys_unsorted[]' <<< "${JSON_OBJECT_VAR}"))
- Jeremy[]
看起来似乎是不必要的。对我来说,这个命令很有效:jq 'keys_unsorted' file.json
。 - Cornelius Roemerkeys_unsorted
并展示了示例数据的差异(OP使用了排序后的键,这掩盖了键和未排序的键之间的差异)。 - Cornelius Roemerecho '{"ab": 1, "cd": 2}' | jq -r 'keys[]'
命令可以将所有的键一行一个输出,不带引号。
ab
cd
以下是通过 @anubhava 答案中提供的示例 JSON 获取 Bash 数组的另一种途径:
arr=($(jq --raw-output 'keys_unsorted | @sh' file.json))
echo ${arr[0]} # 'Archiver-Version'
echo ${arr[1]} # 'Build-Id'
echo ${arr[2]} # 'Build-Jdk'
jq 'keys | sort' …
以获得更好的可读性。 - AnrDaemonjq 'keys'
在输出键之前会对其进行排序,这可能不符合用户的预期。 - Cornelius Roemer'keys'
默认已经排序。如果需要未排序的结果(这正是我所需的),请使用'keys_unsorted'
。 - Cornelius Roemer