使用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
命令解释
.[]:遍历JSON数组中的每个日期对象.date as $date:将当前对象的date值存入变量$date,供后续每条结果复用.results[]:遍历当前日期对象下的所有results子项[$date, .field1, .field2, .field3]:将日期和当前结果的三个字段组合成数组@csv:将数组转换为CSV格式的行
内容的提问来源于stack exchange,提问作者aoliv
相关产品推荐
相关产品推荐

