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

如何将JSON文件中的指定块复制到另一个JSON文件?

解决方案

先明确目标文件内容:

foo.json

{
  "name": "foo",
  "block": {
    "one": 1,
    "two": "2"
  },
  "otherData": {
    "two": 1,
    "one": "2"
  }
}

bar.json

{
  "name": "bar"
}

要实现将foo.json的block节点合并到bar.json中,你的原命令存在两个问题:

  1. --argjson的参数用单引号包裹了$(jq '.block' ./foo.json),shell不会解析单引号内的命令插值,导致传入的是字符串而非合法JSON;
  2. . += [$block]会把数据以数组元素的形式追加,不符合预期的对象合并需求。

下面是两种可行的一行命令:

方法一:通过slurp模式合并两个文件

jq -s '.[1] + {block: .[0].block}' foo.json bar.json | sponge bar.json
  • -s参数会把所有输入的JSON文件读入一个数组,.[0]对应foo.json的内容,.[1]对应bar.json的内容;
  • +操作符用于合并两个JSON对象,将foo的block节点添加到bar的对象中。

方法二:通过参数传递单个节点

jq --argjson block "$(jq '.block' foo.json)" '.block = $block' bar.json | sponge bar.json
  • 先用jq '.block' foo.json提取出block的JSON内容;
  • 通过--argjson将该JSON内容作为参数传入主jq命令,直接为bar.json的对象添加block字段并赋值。

执行任意一种命令后,bar.json都会变成预期的结构:

{
  "name": "bar",
  "block": {
    "one": 1,
    "two": "2"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:54:19