如何使用 jq 将 2 个对象转换为 CSV?

How to use jq to convert 2 objects into CSV?

我正在尝试转换如下所示的对象:

{
  "metricId": "metric1",
  "data": [
    {
      "dimensions": [
        "DEVICE-a1b2c3",
        "queue1"
      ],
      "dimensionMap": {
        "Queue": "queue1",
        "enitity": "DEVICE-a1b2c3"
      },
      "timestamps": [
        1626286800000
      ],
      "values": [
        1
      ]
    },
    {
      "dimensions": [
        "DEVICE-a1b2c3",
        "queue2"
      ],
      "dimensionMap": {
        "Queue": "queue2",
        "entity": "DEVICE-a1b2c3"
      },
      "timestamps": [
        1626286800000
      ],
      "values": [
        2
      ]
    }
  ]
}
{
  "metricId": "metric2",
  "data": [
    {
      "dimensions": [
        "DEVICE-a1b2c3",
        "queue1"
      ],
      "dimensionMap": {
        "Queue": "queue1",
        "entity": "DEVICE-a1b2c3"
      },
      "timestamps": [
        1626286800000
      ],
      "values": [
        11
      ]
    },
    {
      "dimensions": [
        "DEVICE-a1b2c3",
        "queue2"
      ],
      "dimensionMap": {
        "Queue": "queue2",
        "entity": "DEVICE-a1b2c3"
      },
      "timestamps": [
        1626286800000
      ],
      "values": [
        22
      ]
    }
  ]
}

到如下所示的 CSV:

"metric1","queue1",1626286800000,1
"metric1","queue1",1626286800000,2
"metric2","queue1",1626286800000,11
"metric2","queue1",1626286800000,22

我有点成功,但我的结果重复了。

命令:jq -r '. | {id:.metricId, queue: .data[].dimensionMap.Queue, time: .data[].timestamps[0], value: .data[].values[0]} | [.id, .queue, .time, .value] | @csv'

输出:

"metric1","queue1",1626286800000,1
"metric1","queue1",1626286800000,2
"metric1","queue1",1626286800000,1
"metric1","queue1",1626286800000,2
"metric1","queue2",1626286800000,1
"metric1","queue2",1626286800000,2
"metric1","queue2",1626286800000,1
"metric1","queue2",1626286800000,2
"metric2","queue1",1626286800000,11
"metric2","queue1",1626286800000,22
"metric2","queue1",1626286800000,11
"metric2","queue1",1626286800000,22
"metric2","queue2",1626286800000,11
"metric2","queue2",1626286800000,22
"metric2","queue2",1626286800000,11
"metric2","queue2",1626286800000,2

我查看了文档和几个博客 posts/videos 但到目前为止我还没有找到解决方案。感谢您的帮助。

解决该问题的一种方法是使用 jq "$-variables":

.metricId as $metricId
| .data[]
| .dimensionMap.Queue as $q
| [.timestamps, .values] | transpose[]
| [$metricId, $q, .[]]
| @csv