如何使用JQ工具实现三种JSON数据修改场景?
使用JQ实现JSON中asset对象的统一修改需求
可以用一条JQ命令覆盖你提到的所有场景,无需区分asset是否存在或原有值是什么,直接确保最终asset对象包含house: true和colour: "orange",同时保留其他已有字段。
核心命令:
jq '.spec.asset |= (. // {}) + {"house": true, "colour": "orange"}' input.json
场景1:asset已存在且包含其他字段
原始输入:
{ "name": "Paul", "country": "USA", "spec": { "asset": { "yard": true } } }
执行命令后输出:
{ "name": "Paul", "country": "USA", "spec": { "asset": { "yard": true, "house": true, "colour": "orange" } } }
场景2:asset不存在
原始输入:
{ "name": "Paul", "country": "USA", "spec": {} }
执行命令后输出:
{ "name": "Paul", "country": "USA", "spec": { "asset": { "house": true, "colour": "orange" } } }
场景3:asset存在但字段值错误
原始输入:
{ "name": "Paul", "country": "USA", "spec": { "asset": { "house": false, "colour": "black" } } }
执行命令后输出:
{ "name": "Paul", "country": "USA", "spec": { "asset": { "house": true, "colour": "orange" } } }
命令逻辑说明
.spec.asset |= ...:定位到spec下的asset字段,对其执行后续修改操作(. // {}):如果asset不存在(或值为null),则用空对象{}替代,确保合并操作能正常触发+ {"house": true, "colour": "orange"}:将指定键值对与原有(或空)对象合并,强制覆盖原有字段值,同时保留未指定的其他字段(如场景1中的yard)
内容的提问来源于stack exchange,提问作者infotechsups
相关产品推荐
相关产品推荐

