arrays - JQ - 合并两个数组

标签 arrays json parsing jq array-merge

我正在寻找 JQ 查询,它允许我合并 2 个数组变量(不是文件),并带我用第二个数组中的较新值覆盖第一个数组。例如:

#!/bin/bash -e

firstArrayVariable='
    [
        {
            "Key": "A B",
            "Value": "1 2"
        },
        {
            "Key": "C D",
            "Value": "3 4"
        },
        {
            "Key": "E F",
            "Value": "5 6"
        },
        {
            "Key": "G H",
            "Value": "9 10"
        }
    ]
'

secondArrayVariable='
    [
        {
            "Key": "A B",
            "Value": "1 2"
        },
        {
            "Key": "C D",
            "Value": "3 4"
        },
        {
            "Key": "G H",
            "Value": "11 12"
        },
        {
            "Key": "J K",
            "Value": "15 16"
        }
    ]
'

jq \
    --compact-output \
    --raw-output \
    --arg jqSecondArrayVariable "${secondArrayVariable}" \
    '. + $jqSecondArrayVariable // empty' \
<<< "${firstArrayVariable}"

我无法让它工作,并且出现以下错误

jq: error (at :19): array ([{"Key":"A ...) and string ("\n [\n ...) cannot be added



我期望的合并数组的结果是
[
    {
        "Key": "A B",
        "Value": "1 2"
    },
    {
        "Key": "C D",
        "Value": "3 4"
    },
    {
        "Key": "E F",
        "Value": "5 6"
    },
    {
        "Key": "G H",
        "Value": "11 12"
    },
    {
        "Key": "J K",
        "Value": "15 16"
    }
]

任何帮助将不胜感激!

更新

我尝试按照@peak 的建议使用 --argjson,它连接数组,但无法合并 2 个数组。我现在得到的结果是一个包含重复对象的数组

最佳答案

假设 2 个输入数组分别命名为 firstArrsecondArr

使用 group_by() (通过关键键 "Key" 对对象进行分组)和 map() 函数:

jq --argjson arr1 "$firstArr" --argjson arr2 "$secondArr" -n \
'$arr1 + $arr2 | group_by(.Key) | map(.[-1])'

输出:
[
  {
    "Key": "A B",
    "Value": "1 2"
  },
  {
    "Key": "C D",
    "Value": "3 4"
  },
  {
    "Key": "E F",
    "Value": "5 6"
  },
  {
    "Key": "G H",
    "Value": "11 12"
  },
  {
    "Key": "J K",
    "Value": "15 16"
  }
]

或者,在这种特殊情况下,一种更快的方法,您可以使用 unique_by() 函数应用以下技巧:
jq --argjson arr1 "$firstArr" --argjson arr2 "$secondArr" -n '$arr2 + $arr1 | unique_by(.Key)'

关于arrays - JQ - 合并两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354926/

相关文章:

python - 高级索引返回形状错误的数组

java - 如何解压缩 jsonlz4 Mozilla Firefox session 文件?

java - 将非 ISO 8601 解析为 ISO_INSTANT

解析嵌套括号内包含的值

Javascript 从 xmlhttpresponse 解析响应文本

cocoa - 使用 xCode 制作图表

javascript - JQuery GET 与 JSON 响应。选择特定对象

php - 将复数值数组转换为关联数组

javascript - 将 JSON 数据保存到服务器上

java - 哪些参数最适合在 android studio 上发布包含 JSONArray 的 JSONObjetc?