如何用Bash遍历JSON数组并序列化指定JSON字段值
问题描述
我有一个test.json文件,结构如下:
[ { "key1" : "value-1", "key2" : { "key3" : "value3" } }, { "key1" : "value-2", "key2" : { "key4" : "value4" } } ]
希望将文件内容转换为如下结构(把key2的对象序列化为JSON字符串):
[ { "key1" : "value-1", "key2" : "{\"key3\":\"value3\"}" }, { "key1" : "value-2", "key2" : "{\"key4\":\"value4\"}" } ]
我已经能通过以下命令把key2转成序列化字符串,但不知道怎么更新回原JSON:
jq -c '.[]' $BUILD_DIR/test.json | while read i; do echo $(jq -r '.key2' <<< "$i") | jq '@json' done
另外,我知道直接修改key2值的命令,但不知道怎么结合序列化操作:
jq '( .[]).key2 |= "foo"' $BUILD_DIR/test.json
解决方案
直接用一行jq命令就能完成需求,不需要嵌套循环或者额外的管道操作:
jq '.[] | .key2 |= @json' $BUILD_DIR/test.json
如果需要直接覆盖原文件(操作前建议备份文件),可以加上-i参数:
jq -i '.[] | .key2 |= @json' $BUILD_DIR/test.json
命令解释
.[]:遍历JSON数组中的每一个对象.key2 |= @json:将每个对象的key2字段的值,通过@json过滤器序列化为转义后的JSON字符串,然后赋值回key2字段
内容的提问来源于stack exchange,提问作者priyadhingra19
相关产品推荐
相关产品推荐

