如何用jq将JSON字符串就地替换为解析后的等效内容?
使用jq解析JSON数组中的序列化字符串值
原始输入
你有一个包含多个对象的JSON数组,部分字段的值是序列化后的JSON字符串:
[ { "a": 1, "b": "{\"c\":2}" } ]
目标效果
需要将所有b字段的内容替换为解析后的JSON结构:
[ { "a": 1, "b": { "c": 2 } } ]
jq实现方案
直接使用以下jq命令即可完成需求:
jq 'map(.b |= fromjson)' input.json
命令解释
map(...):遍历数组中的每一个对象,对每个对象执行括号内的操作.b |= fromjson:针对每个对象的b字段,调用fromjson函数将字符串解析为JSON对象,并用解析后的结果覆盖原字段值
容错处理(可选)
如果存在b字段不是合法JSON字符串的情况,可以用try避免命令中断,解析失败时保留原字段值:
jq 'map(.b |= try fromjson // .)' input.json
内容的提问来源于stack exchange,提问作者Morpheu5
相关产品推荐
相关产品推荐

