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

如何用jq将嵌套JSON结构转换为指定格式?

使用jq实现指定JSON结构转换

完全可以用jq完成这个转换,无需编写Python脚本。以下是具体实现方案:

核心jq转换命令

针对你提供的JSON结构,使用以下jq表达式即可完成结构转换:

.addresses.data |= map({
  value: .value,
  remoteRef: {
    key: .key,
    courrierStrategy: "Auto"
  }
})

命令解释

  • .addresses.data |= map(...):定位到addresses下的data数组,对数组内的每个元素执行后续转换逻辑
  • map内部逻辑:为每个数组元素重新构造对象:
    • 保留原字段value
    • 新增remoteRef对象,将原key字段移入其中,并添加固定值字段courrierStrategy: "Auto"

结合Shell遍历脚本使用

你可以将这个jq命令整合到已有的遍历脚本中,同时可以和删除key的操作合并为一个jq命令(提升效率)。示例脚本如下:

# 遍历当前目录下所有JSON文件
for file in *.json; do
  # 替换成你原来的删除key的jq逻辑,这里用del(...)作为示例
  jq 'del(.some.unwanted.key) | .addresses.data |= map({value: .value, remoteRef: {key: .key, courrierStrategy: "Auto"}})' "$file" > "${file}.tmp"
  # 用临时文件覆盖原文件,避免直接写入出错
  mv "${file}.tmp" "$file"
done

测试验证

你可以先用单个文件测试转换效果:

# 将示例JSON内容存入test.json
cat > test.json <<EOF
{ 
  "name": "Ted Mosby",
  "addresses": {
    "data": [
      {
        "key": "address key",
        "value": "any xpto"
      }
    ]
  }
}
EOF

# 执行转换命令
jq '.addresses.data |= map({value: .value, remoteRef: {key: .key, courrierStrategy: "Auto"}})' test.json

执行后会输出你需要的目标JSON结构。

内容的提问来源于stack exchange,提问作者placplacboom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:15:02