当前位置: 首页 > 面试题库 >

如何使用jq从2个文件合并2个JSON对象?

彭仲卿
2023-03-14
问题内容

我在外壳程序脚本中使用jq工具(jq-json-processor)来解析json。

我有2个json文件, 想将它们合并为一个唯一的文件

这里是文件的内容:

文件1

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

文件2

{
    "status": 200,
    "timestamp": 1382461861,
    "value": {
        "aaa": {
            "value3": "v3",
            "value4": 4
        },
        "bbb": {
            "value3": "v3"
        },      
        "ddd": {
            "value3": "v3",
            "value4": 4
        }
    }
}

预期结果

{
    "value": {
        "aaa": {
            "value1": "v1",
            "value2": "v2",
            "value3": "v3",
            "value4": 4
        },
        "bbb": {
            "value1": "v1",
            "value2": "v2",
            "value3": "v3"
        },
        "ccc": {
            "value1": "v1",
            "value2": "v2"
        },
        "ddd": {
            "value3": "v3",
            "value4": 4
        }
    }
}

我尝试了很多组合,但是我得到的唯一结果是以下结果,这不是预期的结果:

{
  "ccc": {
    "value2": "v2",
    "value1": "v1"
  },
  "bbb": {
    "value2": "v2",
    "value1": "v1"
  },
  "aaa": {
    "value2": "v2",
    "value1": "v1"
  }
}
{
  "ddd": {
    "value4": 4,
    "value3": "v3"
  },
  "bbb": {
    "value3": "v3"
  },
  "aaa": {
    "value4": 4,
    "value3": "v3"
  }
}

使用此命令:

jq -s '.[].value' file1 file2

问题答案:

从1.4开始,*操作员现在可以做到这一点。当给定两个对象时,它将递归合并它们。例如,

jq -s '.[0] * .[1]' file1 file2

重要:请注意该-s (--slurp)标志,它将文件放置在同一阵列中。

会给你:

{
  "value1": 200,
  "timestamp": 1382461861,
  "value": {
    "aaa": {
      "value1": "v1",
      "value2": "v2",
      "value3": "v3",
      "value4": 4
    },
    "bbb": {
      "value1": "v1",
      "value2": "v2",
      "value3": "v3"
    },
    "ccc": {
      "value1": "v1",
      "value2": "v2"
    },
    "ddd": {
      "value3": "v3",
      "value4": 4
    }
  },
  "status": 200
}

如果您还想摆脱其他键(如您的预期结果),一种方法是:

jq -s '.[0] * .[1] | {value: .value}' file1 file2

或者大概更有效(因为它没有合并任何其他值):

jq -s '.[0].value * .[1].value | {value: .}' file1 file2


 类似资料:
  • 我在shell脚本中使用jq工具(jqjson处理器)来解析json。 我有2个json文件,希望将它们合并到一个唯一的文件中 文件内容如下: 文件1 文件2 预期结果 我尝试了很多组合,但我得到的唯一结果是以下结果,这不是预期的结果: 使用此命令:

  • 问题内容: 让我们看一个例子。 我需要合并这两个对象数组并创建以下数组: 有没有JavaScript或jQuery函数可以做到这一点? 不适合我 它返回 问题答案: 如果要在JavaScript中合并2个对象数组。你可以使用这一招 例如 输出:

  • 问题内容: 我有一个程序需要合并两个。哈希图的键为a ,值为。合并的特殊条件是,如果键已在字典中,则需要将其添加到现有值中而不是替换它。这是我到目前为止抛出的代码。 问题答案: 如果您的代码不能保证会在到达此方法之前将其初始化,则您将必须执行null检查,没有出路 考虑到HashMap允许将null作为值在代码中容易发生NPE的另一个位置是 如果这两个都不为空,则将获得NPE。

  • 我想将至少2个PDF文件合并为一个,同时保留原始PDF中的所有表单元素。表单元素包括文本字段、单选按钮、复选框、下拉菜单等。请查看此示例PDF文件的表单: 你能做到吗? 编辑:至于实现,我更希望在linux平台上使用开源工具(如'ghostscript'或任何其他您认为适合解决此任务的工具)的命令行解决方案。 当然,欢迎每个人提供解决这个问题的任何工作解决方案,包括一个编码解决方案,它涉及编写一个

  • active=testing my.test.value=test 当前它失败了,错误:原因:java.lang.IllegalArgumentException:无法解析值“${my.test.value}”中的占位符“my.test.value”

  • 我试图结合2个不同的Excel文件。(多亏了post导入多个excel文件到python pandas中,并将它们连接到一个dataframe中) 到目前为止,我得出的结论是: 下面是他们的样子。 null