How to convert csv To nested Json in java

 

问题

https://stackoverflow.com/questions/58859344/how-to-convert-csv-to-nested-json-in-java

i have a csv file in following format

A_aa,A_ab,A_ac,A_ad,B_BB_ba,B_BB_BBB_bb

1,2,3,4,5,6

and i want to convert it into following Nested json

{

'A':{

'aa' : '1',

'ab' : '2',

'ac' : '4',

'ad' : '5',

}

'B':{

'BB':{

'ba' : '5',

'BBB':{

'bb' : '6'

}

}

}

}

解答

csv文件中的第一行是字段名(用下划线表示了层次关系),第 2 行是数据,需要把csv 转成 json 格式。难点在于动态解析,需要用到分组、递归、循环、条件判断与字符串拼接。用 Java 实现代码较长。

Java 下的开源包 SPL 很容易写,只要 5 行:


A

B

1

=file("json.csv").import@cw()

2

=i=0,A1(1).(~.split("_")).(~|A1(2)(#)).(~.run(~="\""/~/"\""))

3

func recurse(AA)

>B1=left(B1,-i)/"{}"/right(B1,i),i+=1,AA.group(~(1)).(if(~.len()==1 && ~(1).len()==2,B1=left(B1,-i)/~(1).concat(":")/right(B1,i),(B1=left(B1,-i)/~(1)(1)/":"/right(B1,i),func(recurse,~.(~.m(2:))))))

4

=func(recurse,A2)

5

=replace(replace(B1,"\"\"","\",\""),"}\"","},\"")

SPL 提供了 JDBC 供 Java 调用,把上面的脚本存为 recurse.splx,在 Java 中以存储过程的方式调用脚本文件:

Class.forName("com.esproc.jdbc.InternalDriver");

con= DriverManager.getConnection("jdbc:esproc:local://");

st = con.prepareCall("call recurse()");
st.execute();

SPL 源代码:https://github.com/SPLWare/esProc

问答搜集