从 JSON 生成 csv 文件

Generate csv files from a JSON

不幸的是,我很难从一种 json 格式生成三个 csv 文件。也许有人很好地暗示了我该怎么做。谢谢

这是输出。在 dropped1dropped2 中可以有多个不同的地址。

{
  "result": {
    "found": 0,
    "dropped1": {
      "address10": 1140
    },
    "rates": {
      "total": {
        "1min": 3579,
        "5min": 1593,
        "15min": 5312,
        "60min": 1328
      },
      "dropped2": {
        "address20": {
          "1min": 9139,
          "5min": 8355,
          "15min": 2785,
          "60min": 8196
        }
      }
    },
    "connections": 1
  },
  "id": "whatever",
  "jsonrpc": "2.0"
}

3 个 csv 文件应以这种形式显示。

address10,1140

total,3579,1593,5312,1328

address20,9139,8355,2785,8196

你试过使用这个库吗? https://www.npmjs.com/package/json-to-csv-stream

npm i json-to-csv-stream

如果您决定使用 jq,除非有某些特定原因不这样做,否则我建议为三个输出文件中的每一个调用一次 jq。这三个调用将如下所示:

jq -r '.result.dropped1 | [to_entries[][]] | @csv' > 1.csv

jq -r '.result.rates.total | ["total", .["1min"], .["5min"], .["15min"], .["60min"]] | @csv' > 2.csv

jq -r '.result.rates.dropped2
 | to_entries[]
 | [.key] + ( .value | [ .["1min"], .["5min"], .["15min"], .["60min"]] )
 | @csv
' > 3.csv

如果您可以确定 totaladdress20 对象中键的顺序是固定的并且顺序正确,那么最后两次调用就可以简化。