如何使用jq为JSON中任意位置的指定对象结构添加键值对?
使用jq为JSON中所有"food"对象添加键值对
问题场景
现有如下JSON数据:
{ "lunch": { "time": "11 am", "food": { "is_pizza": true } }, "snacks": [ { "time": "2 pm", "food": { "is_pizza": true } }, { "time": "3:30 pm", "food": { "is_pizza": true } } ], "dinner": { "time": "6 pm", "food": { "is_pizza": true } } }
需要遍历整个JSON结构,在所有包含"food"键的对象中,为对应的food子对象添加键值对"extra_cheese": true。
解决方案
使用jq的walk函数递归遍历JSON结构,配合条件判断即可实现需求:
jq 'walk(if type == "object" and has("food") then .food += {"extra_cheese": true} else . end)' input.json
命令解释
walk(...):递归遍历JSON的每一个元素,对每个元素执行括号内的逻辑if type == "object" and has("food"):判断当前元素是否是对象且包含food键.food += {"extra_cheese": true}:满足条件时,给food对象添加指定键值对else . end:不满足条件的元素保持原样
执行命令后,将得到目标结果:
{ "lunch": { "time": "11 am", "food": { "is_pizza": true, "extra_cheese": true } }, "snacks": [ { "time": "2 pm", "food": { "is_pizza": true, "extra_cheese": true } }, { "time": "3:30 pm", "food": { "is_pizza": true, "extra_cheese": true } } ], "dinner": { "time": "6 pm", "food": { "is_pizza": true, "extra_cheese": true } } }
内容的提问来源于stack exchange,提问作者Sasgorilla
相关产品推荐
相关产品推荐

