如何通过jq从含数组的JSON中提取指定id和name对象
用jq提取嵌套JSON中的所有id和name对象
没问题,这需求用jq的递归遍历功能就能轻松实现,直接上解决方案:
核心jq命令
jq '.. | select(.name and .id) | {name, id}' your_source.json
命令解释
我们一步步拆解这个命令的作用:
..:递归遍历JSON结构里的每一个节点,不管是顶层的Automotive,还是嵌套在categories数组里的子分类,都能被遍历到。select(.name and .id):只筛选出同时包含name和id属性的对象,确保我们只拿到需要的分类节点,不会误选其他无意义的元素。{name, id}:从筛选出的对象里提取name和id字段,生成只包含这两个属性的新对象,完全符合你要的输出格式。
测试输出
用你提供的JSON源文件执行这个命令后,会得到如下结果(完整结果包含所有分类,以下为部分示例):
{ "name": "Automotive", "id": "1" } { "name": "Auto Body Styles", "id": "1.1" } { "name": "Commercial Trucks", "id": "1.1.1" } { "name": "Convertible", "id": "1.1.2" } { "name": "Coupe", "id": "1.1.3" } { "name": "Auto Buying and Selling", "id": "1.2" } // ... 剩余所有分类对象都会按此格式输出
如果你的JSON内容是通过标准输入传递的(比如管道),可以这样用:
cat your_source.json | jq '.. | select(.name and .id) | {name, id}'
内容的提问来源于stack exchange,提问作者user9763887
相关产品推荐
相关产品推荐

