使用 jq 将一个字段从 JSON 合并到另一个 JSON

Merging one field from a JSON into another JSON using jq

我有两个 JSON 结构相似的文件。我想从第一个 JSON 文件中取出一个项目,然后使用 jq 命令将其添加到第二个 JSON 文件中。我一直在尝试使用 map* 来做到这一点,但没有成功。

我有这个文件:

{
  "items": {
    "foo": {
      "key": "value1"
    },
    "bar": {
      "key": "value2"
    }
  }
}

还有这个文件:

{
  "items": {
    "baz": {
      "key": "value3"
    },
    "qux": {
      "key": "value4"
    }
  }
}

并想将第一个文件中的第一项合并到第二个文件中,以获得此输出:

{
  "items": {
    "baz": {
      "key": "value3"
    },
    "qux": {
      "key": "value4"
    },
    "foo": {
      "key": "value1"
    }
  }
}

使用to_entries[0]减少到第一项,to_entries重建对象,然后使用|=更新items对象,并使用* 与通过 input:

访问的第二个文件合并
jq '(.items |= ([to_entries[0]] | from_entries)) * input' 1.json 2.json
{
  "items": {
    "foo": {
      "key": "value1"
    },
    "baz": {
      "key": "value3"
    },
    "qux": {
      "key": "value4"
    }
  }
}

Demo

jq '.items.foo = input.items.foo' 2.json 1.json