如何使用附加密钥将两个 json 文件与 jq 合并

How to merge two json file with jq with additional key

我有 2 个 json 文件,想将它们合并到一个唯一的文件中,但有额外的键,例如“first_key”和“second_key”

这里是文件内容:

文件 1

{
  "timestamp": 1382461861,
  "value": {
      "aaa": {
          "value1": "v1",
          "value2": "v2"
      },
      "bbb": {
          "value1": "v1",
          "value2": "v2"
      },
      "ccc": {
          "value1": "v1",
          "value2": "v2"
      }
   }
}

文件 2

{
  "timestamp": 138246330,
  "value": {
      "ddd": {
          "value1": "v1",
          "value2": "v2"
      },
      "eee": {
          "value1": "v1",
          "value2": "v2"
      },
      "fff": {
          "value1": "v1",
          "value2": "v2"
      }
   }
}

预期结果:

{ 
  "first_key" : {
    "timestamp": 1382461861,
    "value": {
        "aaa": {
            "value1": "v1",
            "value2": "v2"
        },
        "bbb": {
            "value1": "v1",
            "value2": "v2"
        },
        "ccc": {
            "value1": "v1",
            "value2": "v2"
        }
     }
  },
  "second_key": {
    "timestamp": 138246330,
    "value": {
        "ddd": {
            "value1": "v1",
            "value2": "v2"
        },
        "eee": {
            "value1": "v1",
            "value2": "v2"
        },
        "fff": {
            "value1": "v1",
            "value2": "v2"
        }
     }
  }
}

我尝试了很多组合,但结果 none 有我预期的附加键。我也是使用 jq 的新手,所以如果您能告诉我应该使用的命令,我将不胜感激。谢谢。

尝试以下方法之一:

jq --slurp '{first_key:.[0], second_key:.[1]}' file1 file2
jq --null-input '{first_key:input, second_key:input}' file1 file2
jq --null-input '[inputs] | {first_key:.[0], second_key:.[1]}' file1 file2
jq --null-input --argfile f1 file1 --argfile f2 file2 '{first_key:$f1, second_key:$f2}'
jq --null-input --argjson f1 "$(<file1)" --argjson f2 "$(<file2)" '{first_key:$f1, second_key:$f2}'
jq --null-input --slurpfile f1 file1 --slurpfile f2 file2 '{first_key:$f1[0], second_key:$f2[0]}'
jq --null-input --slurpfile f <(cat file1 file2) '{first_key:$f[0], second_key:$f[1]}'

备注

  • --slurp可以简写为-s
  • --null-input可以简写为-n
  • --argfile 已弃用,取而代之的是 --slurpfile