在Java中将嵌套的任意JSON转换为CSV

时间:2014-07-16 10:08:50

标签: java json csv converter

这个问题已被多次询问,但我无法找到解决问题的答案。

我试图将嵌套的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);

伊斯梅尔

3 个答案:

答案 0 :(得分:2)

Converting JSON to XLS/CSV in Java有你想要的东西。

基本上,您需要使用org.json.CDL将JSON转换为CSV格式

答案 1 :(得分:1)

评论是不方便发布长篇答案的地方,所以我在这里发布我的答案。

  1. 分析您的JSON以及您可以从数据库中获取的所有可能的JSON结构。它应该是有限数量的JSON表单。

  2. 正如您已经分析了JSON结构,构建了一个类/类层次结构,它完全反映了这种结构。

  3. 根据您的选择使用JSON serializer/deserializer library,将JSON反序列化为java对象。

  4. 使用StringBuffer / StringBuilder类,迭代对象信息,并构建以逗号分隔(或制表符分隔)的字符串。

  5. 将您在前一阶段构建的字符串写入文件。

  6. 那就是它。

答案 2 :(得分:0)

就像你说的那样:

  

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