2011-08-24 131 views
28

有没有人有任何示例Java代码将JSON文档转换为XLS/CSV文件?我试图在谷歌上搜索,但无济于事。将JSON转换为Java中的XLS/CSV

+0

见太纽约的回答是:http://stackoverflow.com/questions/662859/convert-csv -xls-to-json – JMax

+0

他正在向Json要求CSV ......而不是其他方式。 –

回答

-2

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

+1

如果JSON文件是平面数组,并且所有对象都具有相同的字段名称,则可以将其映射到二维表。请参阅@ Sridhar的示例输入。 –

3

您可以使用commons csv转换为CSV格式。或者使用POI转换为xls。如果您需要帮助程序转换为xls,则可以使用jxls,它可以使用表达式语言将java bean(或列表)转换为excel。

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

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

+0

如何将'{'foo':{'bar':[1,2,3]}}'映射到电子表格? – 2011-08-24 08:02:05

+0

这就是为什么我说,如果json对象是json单个对象,而不是json数组,则结果将是电子表格中的1行。如果json对象是json数组,则这些行将与json数组大小相同。再次,您必须指定要将哪些属性写入该电子表格。如果你的例子,如果你想显示栏(其值是数组),该列将显示可能[email protected],但它是一个数组,正确的。但如果对象是[{name:'a','bar':[1,2,3]},{name:'b','bar':[2,3,4]}],并且您想要只显示名字,这是可行的,对吧? – Jef

25

您只能将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> 
这里
+0

感谢您使用此代码,但我是Java新手,并且遇到问题以使其正常工作。 'jsonout'和'response'变量没有被定义。任何想法?再次感谢! – hhh

+0

FileUtils.writeStringToFile(file,csv);已弃用 –

+0

是否有另一种方法比使用org.json.CDL?我似乎无法将该类导入到我的Android项目中 – keinabel