使用jq条件提取JSON中无contentType属性且以BT开头的ID
使用jq条件提取JSON中无contentType属性且以BT开头的ID
看起来你现在的jq命令因为保留了原JSON的结构,导致深层嵌套的ID(比如BT-10)没被正确提取出来。咱们换个思路,直接递归遍历所有节点,筛选符合条件的ID然后收集成数组就可以解决这个问题了。
试试这个jq命令:
[.. | select(type == "object" and has("id") and .id | startswith("BT") and (has("contentType") | not)) | .id]
我来拆解下这个命令的逻辑:
..:这个符号会递归遍历JSON里的每一个节点,不管嵌套多深的对象都能被扫到,完美解决你遇到的深层ID提取问题select(...):用来筛选符合所有条件的对象:type == "object":先确保当前节点是一个对象(不是数组或字符串)has("id"):对象必须包含id字段.id | startswith("BT"):id的值要以BT开头(has("contentType") | not):对象不能包含contentType字段
| .id:把筛选出来的对象的id值提取出来- 最外层的
[]:把所有提取到的id值打包成一个数组
用这个命令处理你的JSON,会直接得到你想要的最优结果:
["BT-03", "BT-Care", "BT-10"]
备注:内容来源于stack exchange,提问作者Skoby
相关产品推荐
相关产品推荐

