首页 > 解决方案 > 从嵌套结构中生成记录并转换为 CSV

问题描述

我有以下要转换为 CSV 的 JSON。它是一个数组数组,其中包含一个对象和一个对象数组。

[
  [
    {
      "name": "A",
      "DATA": [
        {
          "V": 192.1,
          "Q": 0,
          "T": "2020-06-12T16:52:10.000Z"
        },
        {
          "V": 175.2,
          "Q": 0,
          "T": "2020-06-12T16:53:50.000Z"
        }
      ]
    },
    {
      "name": "B",
      "DATA": [
        {
          "V": 176,
          "Q": 0,
          "T": "2020-06-12T16:53:25.000Z"
        },
        {
          "V": 122.8,
          "Q": 0,
          "T": "2020-06-12T16:53:30.000Z"
        },
        {
          "V": 122.01,
          "Q": 0,
          "T": "2020-06-12T16:55:35.000Z"
        }
      ]
    }
  ]
]

期望如下:

A,192.1,0,2020-06-12T16:52:10.000Z
A,175.2,0,2020-06-12T16:53:50.000Z
B,176,0,2020-06-12T16:53:25.000Z
B,122.8,0,2020-06-12T16:53:30.000Z
B,122.01,0,2020-06-12T16:55:35.000Z

我的输出是生成 and 的乘积nameDATA这不是我需要的。

标签: jsonexport-to-csvjq

解决方案


.[][] | [.name] + (.DATA[] | [.V,.Q,.T]) | @csv

jqplay.org 上的演示

如果元素中的键DATA始终保持相同的顺序,则可以改用以下内容。

.[][] | [.name] + (.DATA[] | map(.)) | @csv

要获得有效的 CSV 输出,您需要使用 -r/--raw-output 选项调用 JQ。


推荐阅读