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

如何使用bash/jq将JSON对象以文件名为键添加到另一JSON对象中

实现方法

直接用jq配合bash原生语法就能完成这个JSON合并需求,不需要额外依赖。

单文件合并命令

针对你给出的country1.json合并场景,直接执行以下命令即可:

country_file="country1.json"
jq --arg key "${country_file%.json}" --slurpfile country_content "$country_file" '. + {($key): $country_content[0]}' world.json > world_country1.json

命令说明

  • ${country_file%.json}是bash内置的字符串截断语法,直接去掉文件名末尾的.json后缀,得到country1作为新增字段的键名,不需要调用额外的文本处理命令
  • --slurpfile country_content "$country_file"会把目标country文件的完整JSON内容读取到jq的内部变量中,slurp模式读取的结果是数组,取第一个元素就是文件内存储的完整JSON对象
  • 合并逻辑是在原world.json的对象基础上,追加一个键为去后缀文件名、值为country文件完整内容的字段,最终输出到新的world_country1.json文件

执行后生成的文件内容和你给出的预期结果完全一致:

{
  "class": "world",
  "version": "1.1.0",
  "country1": {
    "class": "country",
    "country_1": {
      "class": "city",
      "name": "seattle"
    }
  }
}

批量合并扩展

如果后续需要合并多个同规则的country文件,直接套bash循环即可,比如合并当前目录下所有country*.json文件:

# 先复制原始world文件作为基础
cp world.json world_merged.json
for f in country*.json; do
  # 逐个合并,临时文件避免读写冲突
  jq --arg key "${f%.json}" --slurpfile cd "$f" '. + {($key): $cd[0]}' world_merged.json > tmp.json && mv tmp.json world_merged.json
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:21:39