jq:如何更改 JSON 的结构以避免笛卡尔积?

abo*_*uso 0 json cartesian-product jq

我有很薄的 JSON 输入:

[
  {
    "x": [
      "2020-02-24T00:00:00",
      "2020-02-25T00:00:00",
      "2020-02-26T00:00:00"
    ],
    "y": [
      3,
      2,
      6
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

我想获得:

[
  {
    "a": "2020-02-24T00:00:00",
    "b": 3
  },
  {
    "a": "2020-02-25T00:00:00",
    "b": 2
  },
  {
    "a": "2020-02-26T00:00:00",
    "b": 6
  }
]
Run Code Online (Sandbox Code Playgroud)

如果我申请,.[]|{a:.x[],b:.y[]}我将获得笛卡尔积(9 项)。

如何更改此 JSON 的结构以避免笛卡尔积?

pea*_*eak 5

引入一个“$-variable”可以让事情简单明了:

map(range(0; .x|length) as $i
    | {a: .x[$i], b: .y[$i]})
Run Code Online (Sandbox Code Playgroud)

但是 $-variable 免费解决方案只需要多一行:

map([.x, .y]
    | transpose[]
    | {a: .[0], b: .[1]})
Run Code Online (Sandbox Code Playgroud)