Jq:将一个文件中的对象附加到另一个文件

时间:2018-02-12 13:37:39

标签: json object merge jq

使用jq,如何从文件(input_02.json)中获取json对象,并将其附加到output.json,同时保留output.json中已有的所有内容(例如,源自文件input_01.json的对象)。

在两种情况下要附加的对象实际上是文件的全部内容,文件的“id”字段作为对象的键。

我正在获取大量输入文件(所有语法都相同),并且基本上将它们组合在一起。

我用来创建要追加的对象的命令如下:

jq '{(.id):(.)} ' input_01.json

给了我:

{
  "input1_id": {

  }
}

input_1.json:

{
  "id": "input1_id",
  "val: "testVal1
}

input2.json:

{
  "id": "input2_id",
  "val: "testVal2
}

期望的输出:

{
  "input1_id": {
    "id": "input1_id",
    "val: "testVal1
  },
  "input2_id": {
    "id": "input2_id",
    "val: "testVal2
  }
}

2 个答案:

答案 0 :(得分:0)

你可以在https://pypi.python.org/pypi/jf

中使用“jf”
$ pip install jf

$ jf 'chain(), {y["id"]: y for y in x}' input1.json input2.json
{
  "input2_id": {
    "id": "input2_id",
    "val": "testVal2"
  },
  "input1_id": {
    "id": "input1_id",
    "val": "testVal1"
  }
}

答案 1 :(得分:0)

您与{(.id):(.)}走在正确的轨道上。以下内容应处理您提到的案例,并可能会就类似案例提供一些想法:

program.jq map({(.id):(.)}) | add

调用:

jq -s -f program.jq input_01.json input_02.json