首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用jq合并和聚合2个JSON文件中的值?

如何使用jq合并和聚合2个JSON文件中的值?
EN

Stack Overflow用户
提问于 2021-09-10 20:28:07
回答 3查看 120关注 0票数 0

我在一个shell脚本中使用jq来操作JSON文件。

我有2个文件,我希望将它们合并到一个文件中,同时在名称/值对中的名称相同时聚合(和)值。

例如:

Input1.json

代码语言:javascript
运行
复制
[
  {
    "A": "Name 1",
    "B": "1.1",
    "C": "2"
  },
  {
    "A": "Name 2",
    "B": "3.2",
    "C": "4"
  }
]

Input2.json

代码语言:javascript
运行
复制
[
  {
    "A": "Name 2",
    "B": "5",
    "C": "6"
  },
  {
    "A": "Name 3",
    "B": "7",
    "C": "8"
  }
]

预期结果:

Output.json

代码语言:javascript
运行
复制
[
  {
    "A": "Name 1",
    "B": "1.1",
    "C": "2"
  },
  {
    "A": "Name 2",
    "B": "8.2",
    "C": "10"
  },
  {
    "A": "Name 3",
    "B": "7",
    "C": "8"
  }
]

我可以使用jq以外的其他工具,但我更愿意最终将解决方案保存在我可以从终端调用的shell脚本中。

任何帮助都是非常感谢的。谢谢。

EN

Stack Overflow用户

发布于 2021-09-10 21:01:01

有一种方法,但也有其他的:

代码语言:javascript
运行
复制
jq -s '
 def to_n: tonumber? // null;
 def merge_values($x;$y): 
   if $x == $y then $x
   elif $x == null then $y
   elif $y == null then $x
   else ($x|to_n) as $xn
   | if $xn then ($y|to_n) as $yn | ($xn+$yn)|tostring
     else [$x, $y]
     end
   end;
 def merge($x;$y):
   reduce ($x + $y |keys_unsorted)[] as $k (null;
     .[$k] = merge_values($x[$k]; $y[$k]) );

   

 INDEX(.[0][]; .A) as $in1
 | INDEX(.[1][]; .A) as $in2
 | ($in1 + $in2|keys_unsorted) as $keys
 | reduce $keys[] as $k ([];
     . + [merge($in1[$k]; $in2[$k]) ])

    
    
' input1.json inut2.json
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69137721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档