如何用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
相关产品推荐
相关产品推荐

