When searching in a json by key i want also to print the key I search by:
Input:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
When search by ".menu.popup", actual result:
$ jq ".menu.popup" test.json
{
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
},
{
"value": "Open",
"onclick": "OpenDoc()"
},
{
"value": "Close",
"onclick": "CloseDoc()"
}
]
}
expected output:
{
"popup": {
"menuitem": [
{
"value": "New",
"onclick": "CreateNewDoc()"
},
{
"value": "Open",
"onclick": "OpenDoc()"
},
{
"value": "Close",
"onclick": "CloseDoc()"
}
]
}
}
An obvious solution is to prefix output with search key, but I wonder if it is possible to include parent key natively for jq.
CodePudding user response:
Construct a new object rather than simply returning the value associated with the key.
jq '{popup: .menu.popup}' tmp.json
If you want to pass the key as an argument, you can.
jq --arg key popup '{($key): .menu|.[$key])}' tmp.json