【问题标题】:How to merge two json file with jq with additional key如何将两个 json 文件与带有附加键的 jq 合并
【发布时间】:2021-11-19 18:30:18
【问题描述】:

我有 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"
        }
     }
  }
}

我尝试了很多组合,但没有一个结果具有我预期的附加键。我也是使用 jq 的新手,所以如果你能告诉我我应该使用的命令,我真的很感激。谢谢。

【问题讨论】:

    标签: json command-line jq


    【解决方案1】:

    尝试以下方法之一:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多