[英]Convert nested arbitrary JSON to CSV in Java
这个问题已被多次询问,但我找不到解决问题的答案。
我正在尝试将嵌套的JSON格式转换为CSV格式,如下所示:
JSON结构是任意的 , 可以是任何嵌套或不嵌套的结构 。
我不想知道它,这是一个数据库答案,我需要将这个JSON答案导出到CSV文件中。
这是一个例子
输入:
{
"_id": 1,
"name": "Aurelia Menendez",
"scores": [
{
"type": "exam",
"score": 60.06045071030959
},
{
"type": "quiz",
"score": 52.79790691903873
},
{
"type": "homework",
"score": 71.76133439165544
}
]
}
我正在寻找的输出:
_id,name,scores.type,scores.score,scores.type,scores.score,scores.type,scores.score
1,Aurelia Menendez,exam,60.06...,quiz,52.79...,homework,71.76..
这是一个示例,它可以是任何其他JSON文档。
这里的想法是在CSV列名称中使用点表示法。
我已经使用过CDL,但输出不是我想要的:
_id scores name
1 "[{score:60.06045071030959,type:exam},{score:52.79790691903873,type:quiz},{score:71.76133439165544,type:homework}]" Aurelia Menendez
那么如何使用点表示法以通用方式将嵌套的JSON转换为CSV?
编辑
使用Jackson对JSON进行反序列化:
ObjectMapper mapper=new ObjectMapper();
JsonNode jsonNode=mapper.readValue(new File("C:\\...\\...\...\\test.json"), JsonNode.class);
伊斯梅尔
在Java中将JSON转换为XLS / CSV可以满足您的需求。
基本上,您需要使用org.json.CDL将JSON转换为CSV格式
评论是不方便发布长篇答案的地方,所以我在这里发布我的答案。
分析您的JSON以及您可以从数据库获得的所有可能的JSON结构。 它应该是有限数量的JSON表单。
正如您已经分析了JSON结构,构建了一个类/类层次结构,它完全反映了这种结构。
使用您选择的JSON序列化程序/反序列化库 ,将JSON反序列化为java对象。
使用StringBuffer / StringBuilder类,迭代对象信息,并构建逗号分隔(或制表符分隔)字符串。
将您在前一阶段构建的字符串写入文件。
而已。
就像你说的一样 :
JSON结构是任意的 , 可以是任何嵌套或不嵌套的结构 。
JSON到CSV转换不能一概而论,因为它因用户而异,也取决于具体要求。
但仍然有一个库 json2flat试图实现它。 但它可能与用户的要求不同。 还是值得一试。
例如,对于上面给出的JSON:
{
"_id": 1,
"name": "Aurelia Menendez",
"scores": [
{
"type": "exam",
"score": 60.06045071030959
},
{
"type": "quiz",
"score": 52.79790691903873
},
{
"type": "homework",
"score": 71.76133439165544
}
]
}
可以解释如下:
/_id,/name,/scores/type,/scores/score
1,"Aurelia Menendez","exam",60.06045071030959
1,"Aurelia Menendez","quiz",52.79790691903873
1,"Aurelia Menendez","homework",71.76133439165544
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.