如何基于数组值使用JQ筛选JSON中的指定数据项
使用jq筛选符合在线ID条件的成员数据
原始JSON数据如下:
{ "data": { "all": { "members": [ { "id": 10, "name": "First" }, { "id": 12, "name": "Second" }, { "id": 14, "name": "Third" } ], "live": { "online": [ 10, 14 ] } } } }
需求是筛选出data.all.members中id存在于data.all.live.online数组里的成员,并输出指定格式的JSON。
可以使用以下jq命令实现:
jq '(.data.all.live.online | INDEX(.)) as $online | { members: [.data.all.members[] | select($online[.id])] }' input.json
命令说明:
(.data.all.live.online | INDEX(.)) as $online:将在线ID数组转换为以ID为键的对象(例如{"10":10, "14":14}),后续判断ID是否存在时效率更高,尤其适合在线ID数量较多的场景。{ members: [.data.all.members[] | select($online[.id])] }:构建目标JSON结构,遍历所有成员,仅保留ID存在于$online对象中的元素,最终组成members数组。
执行命令后,输出结果如下:
{ "members": [ { "id": 10, "name": "First" }, { "id": 14, "name": "Third" } ] }
内容的提问来源于stack exchange,提问作者pieplu
相关产品推荐
相关产品推荐

