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

如何在jq中的地图数组中求和?

尉迟清野
2023-03-14
问题内容

给定以下形式的JSON流:

{ "a": 10, "b": 11 } { "a": 20, "b": 21 } { "a": 30, "b": 31 }

我想对每个对象中的值求和并输出一个对象,即:

{ "a": 60, "b": 63 }

我猜想这可能需要将上述对象列表展平为[name, value]成对的数组,然后使用来求和,reduce但使用语法的文档却很reduce糟糕。


问题答案:

除非您的jq拥有inputs,否则您将不得不使用该-s标志来吞噬对象。然后,您必须进行大量的操作:

  1. 每个对象都需要映射到键/值对
  2. 将对展平为单个数组
  3. 通过密钥将对分组
  4. 将每个累积值的组映射到单个键/值对
  5. 将对映射回对象
    map(to_entries)
        | add
        | group_by(.key)
        | map({
              key: .[0].key,
              value: map(.value) | add
          })
        | from_entries

使用jq 1.5,可以大大改善这一点:您可以消除拖尾的感觉,而直接阅读inputs

    $ jq -n '
    reduce (inputs | to_entries[]) as {$key,$value} ({}; .[$key] += $value)
    ' input.json

由于我们只是累加每个对象中的所有值,因此遍历所有输入的键/值对并将它们加起来会更容易。



 类似资料:
  • 问题内容: 我有一个数组,我需要检查该数组中是否存在元素,或者使用jq, fruit.json 从数组中获取该元素: 不起作用 问题答案: “包含”的语义一点都不简单。通常,最好使用“索引”来测试数组是否具有特定值,例如 IN / 1 如果您的jq有更好的解决方案,则使用它: 如果您的jq具有(与jq 1.5一样),那么这里是一个使用的快速定义:

  • 问题内容: 鉴于此输入: 我正在尝试使用jq构造一个过滤器,该过滤器返回s的所有对象,这些s 的内部数组中 不 包含“数据” ,并且输出以换行符分隔。对于以上数据,我想要的输出是 我想我与此有点接近: 但过滤器不正确,并且无法编译(获取)。 问题答案: 很接近!在表达式中,您必须在之前使用管道()。 该滤波器产生预期的输出。 的JQ食谱具有语法的一个例子。 例如,我只想要类型键包含“ house”

  • 问题内容: 目前,我有一些这样的代码 我认为此代码 效率不高, 因为需要返回数组的副本而不是 就地修改ret 我想知道是否可以将numpy数组用于以下代码: 这样,效率会更高。有人对此有想法吗?谢谢! 问题答案: 想象一个numpy数组占据一个连续的内存块。现在想象一下其他对象,例如其他numpy数组,它们正占据着numpy数组左右两侧的内存。没有空间可以追加或扩展我们的numpy数组。numpy

  • 问题内容: 我的要求如下: 我想提供演员姓名,开始日期,结束日期,并获取他在那段时间里演过的所有电影。 因此,我的服务要求就是这样。 现在,我想改善它。我想提供一个开始日期,结束日期和一个以上的演员名称,并希望查看该时期内所有这些演员的电影。 我不确定我的网址应该如何支持这种情况。 我正在使用spring编写基于Java的Web服务。 下面的代码是为了支持一个演员 我正在考虑的一种解决方案是使用%

  • 我的要求如下: 我想给出演员的名字,开始日期,结束日期,以及他在那个时期所演的所有电影。 因此,我的服务请求是这样的。 现在,我想改进它。我想给出一个开始日期、结束日期和不止一个演员的名字,并想看看那个时期所有演员的电影。 我不知道如何我的网址看起来支持这样的事情。 我正在写一个基于java的web服务使用Spring。 下面的代码是为了支持一个参与者 我正在考虑的一个解决方案是使用%符号来分隔演