You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:05:18