【问题标题】:Merge 2 files which have Json objects using Jq使用 Jq 合并 2 个具有 Json 对象的文件
【发布时间】:2022-10-24 19:06:21
【问题描述】:

我有一个要求,其中需要使用 Jq 将 2 个参数文件合并为一个

param1.json
[
   "name=xyz",
   "age=40",
   "email=qqqq"
] 
param2.json
[
  "name=xyz",
  "age=42",
  "drivingLicense=2761"
]

我需要一个结果值

[
  "name=xyz",
  "age=42",
  "email=qqqq",
  "drivingLicense=2761"
]

当我尝试使用 Jq 添加jq -s '.[0] + .[1]' param1.json param2.json结果

[
  "name=xyz",
  "age=40",
  "email=qqqq",
  "name=xyz",
  "age=42",
  "drivingLicense=2761"
]

我尝试使用jq'。 * 输入'param1.json param2.json但这也不起作用 合并它们的最佳方法是什么 TIA

【问题讨论】:

  • 您尝试的是合并对象,而不是数组。在您的情况下,您需要解构您的数组项,以便在 = 符号之前匹配字符串部分。

标签: json jq


【解决方案1】:

这种方法利用了对象字段名称唯一的情况。碰撞时,后面的项目会覆盖前面的项目。

jq -s '[add | with_entries(.key = (.value | .[:index("=")]))[]]'
[
  "name=xyz",
  "age=42",
  "email=qqqq",
  "drivingLicense=2761"
]

Demo

注意:当然,您仍然可以使用.[0] + .[1]. + input(后者不带-s)来代替add

【讨论】:

    【解决方案2】:

    您可以先将数组转换为对象,然后add 将这些对象放在一起;然后再次转换为数组:

    $ jq -s 'map(map(./"="|{(first):.[1:]|join("=")})|add)|add|to_entries|map(join("="))' param1.json  param2.json
    [
      "name=xyz",
      "age=42",
      "email=qqqq",
      "drivingLicense=2761"
    ]
    
    

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 2021-01-11
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多