【问题标题】:Combining arrays from a stream of objects组合对象流中的数组
【发布时间】:2020-03-30 12:21:38
【问题描述】:

我正在努力使用这个更复杂的 json 结构:

{
  "name": "item1",
  "path":
    {"mapping":
      [
        {"position": {"node_id": "1"}, "rank": "1"},
        {"position": {"node_id": "2"}, "rank": "2"},
        {"position": {"node_id": "3"}, "rank": "3"},
        {"position": {"node_id": "6"}, "rank": "4"}
      ]
    }
}

{
  "name": "item2",
  "path":
    {"mapping":
      [
        {"position": {"node_id": "1"}, "rank": "1"},
        {"position": {"node_id": "5"}, "rank": "2"},
        {"position": {"node_id": "3"}, "rank": "3"},
        {"position": {"node_id": "4"}, "rank": "4"}
      ]
    }
}

我想要的只是整体上唯一的“node_ID”条目,我不在乎它们属于哪个对象。使用[.path.mapping[].position.node_id],每个对象都有一个数组,但我找不到任何关于如何将它们组合起来使用unique 的示例。

期望的输出是:

1
2
3
4
5
6

实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: arrays json jq


    【解决方案1】:

    使用-n/--null-input 选项,您可以通过关键字inputs 获取输入,并用其中的值构造单个数组。例如:

    $ jq -nr '[inputs.path.mapping[].position.node_id] | unique[]' file
    1
    2
    3
    4
    5
    6
    

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2023-02-02
      • 2012-09-14
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多