在 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 [关闭]
如何在groovy中将java.lang.String转换为json