问题
Say I have the following JSON:
{
"a": 0,
"b": "c",
"d": {
"e": {
"f": "g",
"comments": {
"leading": "Lorem ipsum"
},
"h": {
"i": {
"j": [
1,
2
]
},
"comments": {
"trailing": "dolor sit"
}
}
},
"comments": {
"leading": "amet."
}
}
}
I want to get an array with the values of all the fields named comments
(which can be nested in any level). So, in this case I want to get:
[
{
"leading": "Lorem ipsum"
},
{
"trailing": "dolor sit"
},
{
"leading": "amet."
}
]
The order of the array doesn't matter.
How can this be achieved with jq
? I have only performed basic stuff with it and haven't been able to produce anything close to what I need.
Thanks in advance ☺️
回答1:
You can use the getpath
function. Use paths
to identify all the paths leading upto .comments
and get the paths' value
jq '[ getpath ( paths | select( .[-1] == "comments" ) ) ]'
Or use a recursive descent to filter objects containing .comments
and get its value
jq '[ recurse | select(has("comments")?).comments ]'
来源:https://stackoverflow.com/questions/64663297/get-array-with-all-values-for-certain-key-in-json-wih-jq