如何用jq将大JSON Lines文件转为带表头的CSV(不使用slurp)
超大JSON Lines转带表头CSV的最优jq方案
核心思路
针对超大JSON Lines文件(无法全量加载到内存),通过固定字段顺序定义+逐行处理的方式,生成符合要求的带表头CSV,同时避免冗余判断和键顺序依赖。
最优jq命令
jq -nr ' # 自定义需要输出的字段顺序,根据实际结构调整 $fields = ["id", "name", "age", "email"] # 输出CSV表头 | $fields | @csv # 逐行处理输入的JSON对象,提取对应字段值并转为CSV行 , (inputs | [ $fields[] | .[.] ] | @csv) ' input.jsonl > output.csv
方案优势
- 内存友好:不使用
slurp参数,逐行读取处理,完全适配超大文件场景 - 字段顺序可控:通过
$fields数组直接指定输出顺序,不受原JSON键顺序影响 - 代码简洁:用
[ $fields[] | .[.] ]批量提取字段值,无需冗余的条件判断语句 - 表头仅输出一次:通过
, (inputs | ...)将表头与后续数据行串联,保证格式正确性
示例验证
输入(input.jsonl)
{"name": "Alice", "id": 1, "email": "alice@example.com", "age": 30}
{"id": 2, "age": 25, "name": "Bob", "email": "bob@example.com"}
输出(output.csv)
"id","name","age","email"
"1","Alice","30","alice@example.com"
"2","Bob","25","bob@example.com"
内容的提问来源于stack exchange,提问作者Summer-Sky
相关产品推荐
相关产品推荐

