当前位置: 首页 > 知识库问答 >
问题:

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

贾飞章
2023-03-14

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

我试图将嵌套的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与Jackson的反序列化:

   ObjectMapper mapper=new ObjectMapper();

    JsonNode jsonNode=mapper.readValue(new File("C:\\...\\...\...\\test.json"), JsonNode.class);

伊斯梅尔

共有3个答案

吉岳
2023-03-14

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

>

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

    正如您分析了JSON结构后构建的类/类层次结构一样,它充分反映了这种结构。

    您可以选择使用JSON序列化器/反序列化器库,将JSON反序列化到java对象。

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

    将在前一阶段生成的字符串写入文件。

    就这样。

  • 东方和志
    2023-03-14

    在Java中将JSON转换为XLS/CSV符合您的要求。

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

    阮昊阳
    2023-03-14

    就像你说的:

    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
    
     类似资料:
    • 问题内容: 有人可以提供一个示例或参考,该示例或参考提供一种使用Jackson库将嵌套JAVA对象转换为JSON输出的方法的方法。我没有转换平面JAVA对象的问题。但是,JSON库显示嵌套的对象名称和类型,而不是其子对象。我几乎可以利用此处提供的相同代码http://www.mkyong.com/java/jackson-2-convert- java-object-to-from-json/ 。

    • 问题内容: 我是Python和Pandas的新手。我正在尝试将Pandas Dataframe转换为嵌套的JSON。函数.to_json()不能为我的目标提供足够的灵活性。 以下是数据框的一些数据点(在csv中,以逗号分隔): 有很多重复的信息,我想要一个这样的JSON: 我怎样才能做到这一点? 编辑: 再现数据帧的代码: 问题答案: 更新: 结果(格式化): 旧答案: 你可以用它做的,和方法:

    • 有人能用Java代码将下面的JSON转换为Spark DataFrame吗… 注意:它不是文件 逻辑:听kafka主题T1,读取RDD中的每个记录,并应用附加逻辑将结果数据转换为Json对象,并将其写入kafka中的另一主题T2。

    • 输入 json : 预期输出: 我想有一个颠簸转换,它可以嵌套很少的田地。

    • 问题内容: 我正在尝试使用gson将返回的JSON转换为某种数据结构,以便提取有用的数据。 例如: http://search.twitter.com/search.json?q=test&rpp=1 返回值: 最终,我希望能够输出带有发件人名称和推文日期/时间的推文列表。 我已经阅读了gson文档,但是说实话,这让我头疼不已-我那里有很多新概念。 我是否需要定义一个完全映射到JSON结构的类,以

    • 我有两个嵌套的case类: 当然,解决方案应该是泛型的,并且适用于任何case类。 注意:这个讨论很好地回答了如何将单个case类映射到映射。但我无法将其用于嵌套的case类。相反,我得到了: