批量将一行一条 json 串的大文件转换成 csv 文件

例题描述和简单分析

有文本文件 json.txt,部分数据如下:

{"name":"abc1","age":20}

{"name":"abc2","age":20}

{"name":"abc3","age":20...

{"name":"abc4","age":20}

{"name":"abc5","age":20}

其中每行是一条 json 串,但有些脏数据,像第三行这样,需要剔除脏数据,结果导出到 csv,部分结果如下:

name

age

abc1

20

abc2

20

abc4

20

abc5

20

解法及简要说明

在集算器中编写脚本 p1.dfx,如下所示:


A

1

=file("json.txt").cursor@si()

2

=A1.(json(~)).select(ifr(~) && ~.fno()==2)

3

=file("csv.csv").export@ct(A2)

简要说明:

A1  根据文件 json.txt 创建游标并返回,数据扫描完将自动关闭游标。

A2  循环游标 A1,将每条 json 转为记录,如果是括号不匹配则返回 null(脏数据),再过滤出字段数仅为 2 的记录

A3  结果导出至 csv.csv

JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》

问答搜集

https://stackoverflow.com/questions/62703575/how-to-process-larger-files-from-json-to-csv-using-spring-batch