jq处理API数组数据时如何保留数组边界?
保留群组边界的jq数据处理方案
看起来你已经把成员数据的简化逻辑搞清楚了,就是缺了保留原群组层级结构的步骤对吧?之前的命令用.[].members[]直接把所有成员平铺,所以丢失了群组的数组边界。
要保留原有的群组数组结构,你只需要用map()来逐层处理数组,而不是直接展开它们:
核心命令
jq 'map(.members | map({name: .roomName, state: .state.playbackState, vol: .state.volume}))' input.json
命令解释
- 外层的
map(...):遍历原始的群组数组,对每个群组对象进行处理 .members | map(...):针对当前群组的成员数组,把每个成员转换成你需要的简化结构(提取roomName、playbackState和volume)- 整个命令会严格保留原始的数组层级:外层是群组数组,每个元素对应原群组的简化后成员数组
效果验证
处理3gr.json时
输入是3个群组,每个群组仅含1个成员,输出会是:
[ [ { "name": "Room1", "state": "STOPPED", "vol": 15 } ], [ { "name": "Room2", "state": "STOPPED", "vol": 40 } ], [ { "name": "Room3", "state": "STOPPED", "vol": 15 } ] ]
处理1gr.json时
输入是1个群组,包含3个成员,输出会是:
[ [ { "name": "Room1", "state": "PAUSED_PLAYBACK", "vol": 44 }, { "name": "Room2", "state": "PAUSED_PLAYBACK", "vol": 54 }, { "name": "Room3", "state": "PAUSED_PLAYBACK", "vol": 41 } ] ]
完全匹配你期望的两种输出格式!
内容的提问来源于stack exchange,提问作者Jim C
相关产品推荐
相关产品推荐

