在 Java 中将 JSON 转换为 XLS/CSV [关闭]

Posted

技术标签:

【中文标题】在 Java 中将 JSON 转换为 XLS/CSV [关闭]【英文标题】:Converting JSON to XLS/CSV in Java [closed] 【发布时间】:2011-11-02 14:00:14 【问题描述】:

是否有任何示例 Java 代码可以将 JSON 文档转换为 XLS/CSV 文件?我曾尝试在 Google 上搜索,但无济于事。

【问题讨论】:

在此处查看 Matt York 的回答:***.com/questions/662859/convert-csv-xls-to-json 他要求将 Json 转换为 CSV ......而不是其他方式。 【参考方案1】:

您只能将 JSON 数组转换为 CSV 文件。

比方说,你有一个像下面这样的 JSON:

"infile": ["field1": 11,"field2": 12,"field3": 13,
            "field1": 21,"field2": 22,"field3": 23,
            "field1": 31,"field2": 32,"field3": 33]

让我们看看将其转换为 csv 的代码:

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.json.CDL;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JSON2CSV 
    public static void main(String myHelpers[])
        String jsonString = "\"infile\": [\"field1\": 11,\"field2\": 12,\"field3\": 13,\"field1\": 21,\"field2\": 22,\"field3\": 23,\"field1\": 31,\"field2\": 32,\"field3\": 33]";

        JSONObject output;
        try 
            output = new JSONObject(jsonString);


            JSONArray docs = output.getJSONArray("infile");

            File file=new File("/tmp2/fromJSON.csv");
            String csv = CDL.toString(docs);
            FileUtils.writeStringToFile(file, csv);
         catch (JSONException e) 
            e.printStackTrace();
         catch (IOException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
                
    


现在您获得了从 JSON 生成的 CSV。

应该是这样的:

field1,field2,field3
11,22,33
21,22,23
31,32,33

maven 依赖是这样的,

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20090211</version>
</dependency>

2019 年 12 月 13 日更新:

更新答案,因为现在我们也可以支持复杂的 JSON 数组了。

import java.nio.file.Files;
import java.nio.file.Paths;

import com.github.opendevl.JFlat;

public class FlattenJson 

    public static void main(String[] args) throws Exception 
        String str = new String(Files.readAllBytes(Paths.get("path_to_imput.json")));

        JFlat flatMe = new JFlat(str);

        //get the 2D representation of JSON document
        flatMe.json2Sheet().headerSeparator("_").getJsonAsSheet();

        //write the 2D representation in csv format
        flatMe.write2csv("path_to_output.csv");
    


依赖和文档详情在link

【讨论】:

@SwapL 您可以使用相同的3参数方法。 FileUtils.writeStringToFile(file, csv, null); 其中第三个参数是编码 & null 是平台默认值。 @keinabel 我不确定我猜 apache 中有一个 CDL 库。你也可以检查一下。但是,不确定这是否会奏效。否则,您必须编写一个循环来迭代 json 数组。这是一种痛苦:(所以,让我知道哪个对你有用。祝你好运。 @GowthamanM 您可以使用 apache-poi 库写入 excel 文件。但是,您必须迭代 JsonArray docs 来写入每个单独的单元格。 @GowthamanM 我不认为仅仅更改文件扩展名会起作用。我建议您将 JSON 保存为 CSV(使用上面的代码块)并读取 CSV(使用 CSVReader)并将其写入 XLS(使用 apache-poi)csv_to_xls。在这里,您也可以使用黑色背景将标题设为粗体(如您之前要求的那样)。 @PedroJoaquín 我已经用新库更新了答案。希望这能解决您面临的问题。【参考方案2】:

您可以使用 commons csv 转换为 CSV 格式。或者使用 POI 转换成 xls。如果需要helper 转换成xls,可以使用jxls,它可以将java bean(或list)转换成带有表达式语言的excel。

基本上,json doc 可能是一个 json 数组,对吧?所以它会是一样的。结果将是列表,您只需编写要以 excel 格式显示的属性,该格式将由 jxls 读取。见http://jxls.sourceforge.net/reference/collections.html

如果问题是无法读取jxls excel属性中的json,只需先将其序列化为java bean的集合即可。

【讨论】:

如何将'foo': 'bar': [1, 2, 3] 映射到电子表格? 这就是为什么我说,如果json对象是json单个对象,而不是json数组,结果将是电子表格中的1行。如果 json 对象是 json 数组,则行将与 json 数组大小相同。 1 再次,您必须指定要写入该电子表格的属性。如果你的例子,如果你想显示条形(值是数组),列可能会显示 java.lang.Array@xxxxx,但它是一个数组,对。但是如果对象是 [name: 'a', 'bar' : [1,2,3], name: 'b', 'bar' : [2,3,4]],并且你想要只显示名字,可行吧?【参考方案3】:

JSON 文档基本上由列表和字典组成。没有明显的方法可以将这样的数据结构映射到二维表上。

【讨论】:

如果 JSON 文件是一个平面数组,所有对象具有相同的字段名称,那么它可以映射到一个二维表。请参阅@Sridhar 的示例输入。

以上是关于在 Java 中将 JSON 转换为 XLS/CSV [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中将 JSON 转换为 XLS/CSV [关闭]

如何在 Java 中将 YAML 转换为 JSON?

如何在groovy中将java.lang.String转换为json

在 PHP 中将对象转换为 JSON 并将 JSON 转换为对象,(像 Gson for Java 之类的库)

在java中将带有命名空间的xml转换为json

在java中将excel转换为json