json - 使用 jq 将 json 转换为 csv,数组嵌套在数组中

标签 json nested export-to-csv jq

我怎样才能展平这个 json 数组并使用 jq 写出到 csv 文件,以便每一行都包含所有字段,即

我是 jq 的新手,但从这个开始,它不捕获内部嵌套数组

jq -r '(.[0] | keys_unsorted) 作为 $keys | $keys, map([.[ $keys[] ]])[]'

[
   {
      "name":"PM2.5",
      "unit":"ug/m3",
      "values":[
         {
            "timestamp":"2020-11-16T13:10:21.135Z",
            "value":3.696
         },
         {
            "timestamp":"2020-11-16T13:10:31.649Z",
            "value":3.696
         },
         {
            "timestamp":"2020-11-16T13:10:42.35Z",
            "value":3.696
         },
         {
            "timestamp":"2020-11-16T13:10:52.953Z",
            "value":3.696
         }
      ]
   },
   {
      "name":"PM10",
      "unit":"ug/m3",
      "values":[
         {
            "timestamp":"2020-11-16T13:10:21.135Z",
            "value":7.596
         },
         {
            "timestamp":"2020-11-16T13:10:31.649Z",
            "value":7.596
         },
         {
            "timestamp":"2020-11-16T13:10:42.35Z",
            "value":7.596
         },
         {
            "timestamp":"2020-11-16T13:10:52.953Z",
            "value":7.596
         }
      ]
   }
]

如下所示的 csv:

"name", "unit", "timestamp", "value"
"PM2.5", "ug/m3", "2020-11-16T13:10:21.135Z", 3.696
"PM2.5", "ug/m3", "2020-11-16T13:10:31.649Z", 3.696
"PM2.5", "ug/m3", "2020-11-16T13:10:42.35Z", 3.696
"PM2.5", "ug/m3", "2020-11-16T13:10:52.953Z", 3.696  
"PM10", "ug/m3", "2020-11-16T13:10:21.135Z", 7.596
"PM10", "ug/m3", "2020-11-16T13:10:31.649Z", 7.596
"PM10", "ug/m3", "2020-11-16T13:10:42.35Z", 7.596
"PM10", "ug/m3", "2020-11-16T13:10:52.953Z", 7.596

最佳答案

$ jq -r '
  [["name","unit","timestamp","value"]], 
   [ .[] 
     | [ .name, .unit ] + 
       (.values[] | [.timestamp,.value]) ] 
  | .[] 
  | @csv' input.json 
"name","unit","timestamp","value"
"PM2.5","ug/m3","2020-11-16T13:10:21.135Z",3.696
"PM2.5","ug/m3","2020-11-16T13:10:31.649Z",3.696
"PM2.5","ug/m3","2020-11-16T13:10:42.35Z",3.696
"PM2.5","ug/m3","2020-11-16T13:10:52.953Z",3.696
"PM10","ug/m3","2020-11-16T13:10:21.135Z",7.596
"PM10","ug/m3","2020-11-16T13:10:31.649Z",7.596
"PM10","ug/m3","2020-11-16T13:10:42.35Z",7.596
"PM10","ug/m3","2020-11-16T13:10:52.953Z",7.596

构建一个数组数组,每行一个,包括标题行,然后将它们全部格式化为 CSV 记录。

关于json - 使用 jq 将 json 转换为 csv,数组嵌套在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64859291/

相关文章:

json - 如何访问数组中同名的 JSON 变量?

php - 使用 PHP 检查 Json 数组的值

java - 嵌套 If 语句

java - 单词数组,然后嵌套 for 循环来检查字符

r - 使用发布包将 Cox 回归结果导出到 Excel 或 Word

python - 使用 Jmespath 按 JSON 中的部分字符串匹配过滤

java - 如何强制 Java JSON 或 GS​​ON 明确命名我的数组和对象

elasticsearch - 术语、嵌套文档和 must_not 查询在 ElasticSearch 中不兼容?

text - 将数据和文本导出,追加/追加到文件中(Mathematica)

highcharts - CSV 导出 Highcharts 中的隐藏系列