使用jq提取JSON对象部分内容时如何保留原始键名?
jq保留键名提取指定属性的写法
你需要的核心语法是对象构造简写,直接使用以下命令即可:jq '{apples, cherries}'
这个写法是jq的语法糖,等价于完整的键值赋值写法:jq '{apples: .apples, cherries: .cherries}'
示例验证
假设输入的原始JSON为:
{ "apples": ["红富士", "嘎啦果"], "bananas": 5, "cherries": {"origin": "智利", "stock": 30}, "oranges": 12 }
执行上述命令后输出的结果为:
{ "apples": [ "红富士", "嘎啦果" ], "cherries": { "origin": "智利", "stock": 30 } }
完全保留原始键名和属性结构,符合需求。
其他适用场景
- 若需要给提取的属性重命名:使用完整键值对写法即可,比如
jq '{pingguo: .apples, yingtao: .cherries}' - 若输入是JSON数组,每个数组元素都包含目标属性:在外层套
map方法,jq 'map({apples, cherries})' - 若需要提取的目标属性较多,不想逐一罗列:使用
with_entries过滤键名,jq 'with_entries(select(.key == ("apples", "cherries")))'
内容的提问来源于stack exchange,提问作者StackzOfZtuff
相关产品推荐
相关产品推荐

