JQ筛选子键匹配时仅返回对应父字段及匹配子项的实现方法
问题原因
你原来的写法仅筛选出了包含至少一个匹配子项的父级对象,但后续提取.line_items[].quantity时会遍历该父级下所有子项,因此会返回不匹配子项的quantity值。
正确jq命令
jq '.[] | .id as $pid | .line_items[] | select(.catalog_object_id == "VJXWCBDL") | [ $pid, .quantity ]' test.json
命令逻辑说明
- 先用
.[]遍历最外层数组的每一个父级元素 - 将当前父级的
id字段存为变量$pid,避免进入子项上下文后丢失父级数据 - 遍历当前父级下的所有
line_items子项 - 仅保留
catalog_object_id等于VJXWCBDL的子项 - 最终拼接为
[父级id, 匹配子项quantity]的输出格式,和你预期的结果完全一致
内容的提问来源于stack exchange,提问作者Mike S.
相关产品推荐
相关产品推荐

