如何用jq提取JSON内部数组元素生成简化结构?
解决jq提取JSON数组元素的问题
问题1:提取field1数组的第一个元素并保留原结构
你用select(.field1[0])返回原JSON是因为select是用来过滤整个JSON对象的——只要.field1[0]存在(非空/非假),就会完整保留原对象,而不会修改field1数组的内容。
要生成和原结构一致但仅保留field1第一个元素的JSON,需要直接修改field1字段的值,把它替换成只包含第一个元素的数组:
jq '.field1 = [.field1[0]]' tmp.json
这个命令的逻辑是:取出原field1的第一个元素,把它放进新数组,再赋值给原field1字段,其他结构保持不变。
问题2:提取field1中a=="F1A1"和a=="F1A4"的元素
同样要保持原结构,需要用map过滤field1数组中的元素,再替换原字段:
jq '.field1 = (.field1 | map(select(.a == "F1A1" or .a == "F1A4")))' tmp.json
map(...)会遍历field1数组的每个元素select(.a == "F1A1" or .a == "F1A4")筛选出符合条件的元素- 最后把过滤后的数组重新赋值给
field1,其他结构不受影响
如果你的JSON里field1可能为空数组,这个命令也能正常处理,返回空的field1数组。
内容的提问来源于stack exchange,提问作者angelcervera
相关产品推荐
相关产品推荐

