You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jq解析多层JSON并转换为指定格式CSV

多层JSON转关联日期的CSV:正确jq实现方案

待解析JSON结构

[
  {
    "date":"date1",
    "results":
      [  
        {
            "field1":"string11",
            "field2":"string12",
            "field3":"string13"
        },
        {
            "field1":"string21",
            "field2":"string22",
            "field3":"string23"
        }
      ]
  },
  {
    "date":"date2",
    "results":
      [  
        {
            "field1":"string11",
            "field2":"string12",
            "field3":"string13"
        },
        {
            "field1":"string21",
            "field2":"string22",
            "field3":"string23"
        }
      ]
  }
]

预期正确CSV输出

date1,string11,string12,string13
date1,string21,string22,string23
date2,string11,string12,string13
date2,string21,string22,string23

尝试过的错误命令及问题

命令1

jq -Mr '.. | objects | select(has("field1")) | [.field1, .field2, .field3,] | @csv' file.json

输出问题:丢失每条记录对应的日期字段,结果如下:

string11,string12,string13
string21,string22,string23
string11,string12,string13
string21,string22,string23

命令2

jq -r '.[] | [.date, .results[].field1, .results[].field2, .results[].field3] | @csv' file.json

输出问题:仅提取每个日期下的第一条结果,字段匹配逻辑错误,结果如下:

date1,string11,string12,string13
date2,string11,string12,string13

正确的jq命令

jq -r '.[] | .date as $date | .results[] | [$date, .field1, .field2, .field3] | @csv' file.json

命令解释

  1. .[]:遍历JSON数组中的每个日期对象
  2. .date as $date:将当前对象的date值存入变量$date,供后续每条结果复用
  3. .results[]:遍历当前日期对象下的所有results子项
  4. [$date, .field1, .field2, .field3]:将日期和当前结果的三个字段组合成数组
  5. @csv:将数组转换为CSV格式的行

内容的提问来源于stack exchange,提问作者aoliv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:51:07