使用jq按key查询JSON时如何原生保留父级key输出
jq查询JSON时保留目标父级key的原生实现方案
jq本身原生支持该需求,核心是使用其内置的对象构造语法实现,不需要手动拼接字符串。
针对当前场景的直接实现
你要输出包含popup作为父key的结果,直接执行以下命令即可:
jq '{"popup": .menu.popup}' test.json
执行后的输出就是你期望的格式:
{ "popup": { "menuitem": [ { "value": "New", "onclick": "CreateNewDoc()" }, { "value": "Open", "onclick": "OpenDoc()" }, { "value": "Close", "onclick": "CloseDoc()" } ] } }
更简化的通用写法
如果你的查询路径最后一级的key名和你要输出的key名一致,可以用jq的简写语法,不需要重复写值路径:
jq '.menu | {popup}' test.json
这个写法和上面的命令效果完全等价,{popup}是{"popup": .popup}的语法糖,适合提取同一父节点下的多个key的场景,比如你要同时提取menu下的id、value、popup三个字段并保留key名,直接写:
jq '.menu | {id, value, popup}' test.json
输出会自动保留三个key的结构:
{ "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }
内容的提问来源于stack exchange,提问作者vladtf
相关产品推荐
相关产品推荐

