批量将一行一条 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 脚本》。
英文版