使用jq转换英国公司PSC JSON数据为CSV报错问题咨询
错误原因分析
- 输入文件为JSON Lines格式(每行对应1条独立JSON对象),并非包裹在方括号中的标准JSON数组。原命令开头使用的
map()是仅适用于数组的操作符,直接作用于单个JSON对象时就会触发索引类报错。 - 所需提取的字段存在嵌套结构:地址类字段(address_line_1、country、locality等)均嵌套在顶层
address对象下,出生日期相关的month、year字段嵌套在顶层date_of_birth对象下,原命令直接读取顶层对应字段无法获取有效值,也会触发取值错误。
正确转换方案
针对1GB大小的大文件,直接使用以下jq命令完成转换即可,兼顾性能与字段兼容性:
jq -nr ' # 输出CSV表头 ("company_number,address_line_1,country,locality,postal_code,premises,ceased_on,country_of_residence,month,year,etag,kind"), # 逐行处理所有JSON对象 inputs | [ .company_number, .address.address_line_1, .address.country, .address.locality, .address.postal_code, .address.premises, .ceased_on, .country_of_residence, .date_of_birth.month, .date_of_birth.year, .etag, .kind ] | map(. // "") | @csv ' in.json > out.csv
命令说明
-n参数:以null作为初始输入,配合inputs关键字读取所有行的JSON对象,不会遗漏第一行数据map(. // ""):处理字段缺失场景,将不存在的字段值统一替换为空字符串,避免CSV列错位- 嵌套字段统一通过层级路径取值,匹配原始数据的结构规则
内容的提问来源于stack exchange,提问作者Abigail Fitzsimmons
相关产品推荐
相关产品推荐

