使用Java将嵌套的任意JSON转换为CSV

这个问题已经被问了很多次,但我找不到解决我的问题的答案。

我试图将嵌套的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格式?

编辑

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
    
    链接地址: http://www.djcxy.com/p/21715.html

    上一篇: Convert nested arbitrary JSON to CSV in Java

    下一篇: Java changing variable name changes program behaviour