查找 CSV 与 JSON 的不同

【问题】

let’s say i have two CSV file. file 1 defines standard csv data file & File 2 is the mapping file of file 1 & Json now what i want is i want to map those two files and compare the data of File 1 with the Json. & output the mismatch as a csv.

how do i achieve that?

File 1:

key,id,value,name,number

1,322,re43,dasu,555-456

File 2:

Rsat_key,key

Retina_id,id

reason_value,value

real_name,name

work_ph,phone

Json

{

 "Rsat_key":1,

 "Retina_id":322,

 "reason_value":,

 "real_name":dasu,

 "work_ph":,555-456,

}

【回答】

File1 和 Json 都是多行结构化数据,要比较它们的差异,只需按关键字进行 join 运算再条件查询就可以。但 JAVA 缺乏结构化计算类库,实现过程复杂,代码可读性差。这种情况下可以用集算器辅助实现,SPL 代码更直观易懂:



A

1

=file("f1.csv").import@ct()

2

=file("f2.csv").import@ct()

3

=json(file("3.json").read())

4

=condition=A2.("_1."+_2+"!=_2."+_1).concat("||")

5

=join@1(A1,${csvKey};A3,${A2.select(_2==csvKey)._1})

6

=A5.select(${condition})

A1:读取 f1.csv 文件的记录及列名

A2:读取 f2.csv 文件,没有列名,默认为 _1、_2

A3:读取 json 内容,并解析为结构化数据

A4:拼凑查询条件字符串

1png

A5:join 运算。csvKey 是参数,代表 File1 的主键。函数 join 默认是内连接,@1 表示左连接。${} 表示将字符串动态解析为表达式。

2png

A6:对 A5 做条件查询,返回满足条件的记录

JAVA 可通过 JDBC 接口调用集算器,参考【Java 如何调用 SPL 脚本】。