如何使用jq更新JSON数组值并返回完整JSON结构?
问题原因与解决方法
问题根源
你当前的jq命令先提取了.data.cars数组进行处理,但最终只输出这个处理后的数组,没有将其放回原JSON的层级结构中,所以丢失了顶层的data包裹结构。
正确命令
要保留完整JSON结构,需要使用jq的更新赋值运算符|=,直接修改原JSON里的.data.cars字段:
jq '.data.cars |= map(.rating = (if .specs.seats > 3 then "OK" else "Too small" end))' cardata.json
|=的作用是把左侧路径(.data.cars)对应的值,替换成右侧表达式处理后的结果,这样整个JSON的层级会被完整保留。
执行结果
运行上述命令后,会返回完整的更新后JSON:
{ "data": { "cars": [ { "type": "limo", "rating": "OK", "comfort": 1, "specs": { "seats": 6, "heat": true, "color": "black" } }, { "type": "sedan", "rating": "OK", "comfort": 2, "specs": { "seats": 4, "heat": true, "color": "blue" } }, { "type": "open", "rating": "Too small", "comfort": 3, "specs": { "seats": 2, "heat": true, "color": "red" } }, { "type": "sport", "rating": "Too small", "comfort": 5, "specs": { "seats": 1, "heat": false, "color": "yellow" } } ] } }
内容的提问来源于stack exchange,提问作者HJensen
相关产品推荐
相关产品推荐

