如何用纯jq实现保留一级键并将下层JSON转为转义字符串?
纯jq解决方案完全可行!
当然有纯jq的办法实现你要的效果,核心就是用jq内置的tojson函数,它能把JSON值直接序列化为带正确转义的JSON字符串。
具体命令
针对你的需求,只需要遍历所有一级键的值,判断如果是对象类型就转成JSON字符串,其他类型保持原样:
.[] |= if type == "object" then tojson else . end
验证示例
输入JSON:
{ "a": "1", "b": { "c": "2", "d": { "e": "3" } }, "f": "4" }
执行命令(假设输入存在input.json文件里):
jq '.[] |= if type == "object" then tojson else . end' input.json
输出结果:
{ "a": "1", "b": "{\"c\":\"2\",\"d\":{\"e\":\"3\"}}", "f": "4" }
额外说明
如果你的场景里一级键的值还有数组类型,也需要转成转义字符串的话,可以修改条件为:
.[] |= if type == "object" or type == "array" then tojson else . end
这样就能覆盖对象和数组两种嵌套结构的转换啦!
内容的提问来源于stack exchange,提问作者horia
相关产品推荐
相关产品推荐

