【问题标题】:How to merge two files?如何合并两个文件?
【发布时间】:2019-07-10 15:46:33
【问题描述】:

我正在尝试使用 --argjson 合并文件,但它会抛出

参数列表太长

还有其他方法可以合并这些文件吗?

尝试使用 --slurpfile 但无法获得所需的输出

[
  {
    "path": "1"
  },
  {
    "path": "a/1"
  },
  {
    "path": "a/2"
  }
]
jq --argjson groupInfo "$(jq .data file1.json)" '.records[].version.data+=$groupInfo' file2.json 

文件 1:

{
    "id": "test",
    "data": [
        {
            "path": "a/1"
        },
        {
            "path": "a/2"
        }
    ],
    "information": {
        "id": "1"
    }
}

文件 2:

{
  "records": [
    {
      "version": {
        "data": [
            {
                "path": "1"
            }
        ]
      }
    }
  ]
}

输出文件:

{
  "records": [
    {
      "version": {
        "data": [
          {
            "path": "1"
          },
          {
            "path": "a/1"
          },
          {
            "path": "a/2"
          }
        ]
      }
    }
  ]
}

【问题讨论】:

    标签: json file merge jq


    【解决方案1】:

    --arg 和 --argjson 选项适用于少量 JSON。尽管 --argfile 选项在技术上已被弃用,但它非常适合您的方法:

    jq --argfile groupInfo <(jq .data file1.json) '
      .records[].version.data+=$groupInfo' file2.json
    

    还有其他选择。例如

    jq -s '
      .[0].data as $groupInfo
      | .[1]
      | .records[].version.data+=$groupInfo
    ' file1.json file2.json
    

    我会让你弄清楚如何使用--slurpfile :-)

    【讨论】:

    • 感谢您的帮助。虽然我想出了如何使用 --slurpfile 并且能够获得所需的输出
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多