【问题标题】:how to flatten inner array objects without getting cartesian product of the properties如何在不获取属性的笛卡尔积的情况下展平内部数组对象
【发布时间】:2019-08-03 20:58:25
【问题描述】:

[问题的demo可以看下面jq播放:https://jqplay.org/s/Lx7eM2akzp]

有以下数组

{
  "t": "0",
  "d": "12090",
  "w": "1",
  "s": [
    {
      "ac": "252",
      "$t": "pastas"
    },
    {
      "t": "1280",
      "ac": "226",
      "$t": "299"
    },
    {
      "t": "2780",
      "ac": "252",
      "$t": "187"
    }
  ]
}

如何展平内部数组以便可以运行类似于

的查询
jq '{ "absolute": .t, "word": .s[]."$t", "relative": .s[].t, }'

以便我得到如下结果:

{
  "absolute": "0",
  "word": "pastas",
  "relative": null
}
{
  "absolute": "0",
  "word": "299",
  "relative": "1280"
}
{
  "absolute": "0",
  "word": "187",
  "relative": "2780"
}

而不是所有内部属性之间的组合

【问题讨论】:

    标签: json command-line jq


    【解决方案1】:

    在这种情况下,迭代器是.s[],我们只需要其中一个:

    .s[] as $s
    | { "absolute": .t, "word": $s."$t", "relative": $s.t }
    

    或者,如果你想成为一个小干员:

    {"absolute": .t} + (.s[] | {"word": ."$t", "relative": .t})
    

    【讨论】:

      猜你喜欢
      • 2014-12-29
      • 2018-12-03
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 2023-03-19
      • 2015-04-30
      • 2018-08-28
      • 2021-05-06
      相关资源
      最近更新 更多