如何用jq提取JSON数组单个元素并保留原数组结构?
解决方案
你现有写法的问题是|= .[$i]直接将数组的第$i项元素赋值给了对应顶级键,自然会丢失数组外层结构。只需将提取到的元素重新包裹为数组即可实现需求。
修改后的jq命令
jq --argjson i "$i" '.[] |= [.[$i]]' "$1"
说明
- 新增的方括号
[]会把提取到的单个对象包装为单元素数组,最终输出的dog字段就会保留数组结构 - 原有命令里的
-r参数是用来输出原始纯文本的,如果你要保存的是合法JSON文件,不需要加-r参数,避免输出格式异常 - 如果你的场景里只需要修改
dog字段、不需要处理其他顶级键,也可以用更精准的写法:jq --argjson i "$i" '.dog = [.dog[$i]]' "$1"
内容的提问来源于stack exchange,提问作者dogman
相关产品推荐
相关产品推荐

