2011-08-24 45 views
28

Có ai có bất kỳ mã Java mẫu nào để chuyển đổi tài liệu JSON sang tệp XLS/CSV không? Tôi đã cố gắng tìm kiếm trên Google nhưng không có kết quả.Chuyển đổi JSON sang XLS/CSV trong Java

+0

Xem Matt York trả lời ở đây: http://stackoverflow.com/questions/662859/convert-csv -xls-to-json – JMax

+0

Anh ấy yêu cầu Json gửi CSV ... chứ không phải theo cách khác. –

Trả lời

-2

Tài liệu JSON về cơ bản bao gồm danh sách và từ điển. Không có cách nào rõ ràng để ánh xạ một datastructure như vậy trên một bảng hai chiều.

+1

Nếu tệp JSON là một mảng phẳng, với tất cả các đối tượng có cùng tên trường, thì nó có thể được ánh xạ tới một bảng hai chiều. Xem đầu vào ví dụ của @ Sridhar. –

3

bạn có thể sử dụng csv commons để chuyển đổi thành định dạng CSV. hoặc sử dụng POI để chuyển đổi thành xls. nếu bạn cần helper để chuyển đổi thành xls, bạn có thể sử dụng jxls, nó có thể chuyển đổi java bean (hoặc list) thành excel với ngôn ngữ biểu thức.

Về cơ bản, tài liệu json có thể là một mảng json, phải không? vì vậy nó sẽ giống nhau. kết quả sẽ là danh sách và bạn chỉ cần viết thuộc tính mà bạn muốn hiển thị ở định dạng excel sẽ được đọc bởi jxls. Xem http://jxls.sourceforge.net/reference/collections.html

Nếu vấn đề là json không thể đọc được trong thuộc tính excel jxls, chỉ cần tuần tự hóa nó vào bộ sưu tập đậu java trước.

+0

Làm cách nào để bạn lập bản đồ '{'foo': {'bar': [1, 2, 3]}}' thành bảng tính? –

+0

Đó là lý do tại sao tôi nói, nếu đối tượng json là đối tượng đơn json, không phải mảng json, kết quả sẽ là 1 hàng trong bảng tính. Nếu đối tượng json là mảng json, các hàng sẽ giống với kích thước mảng json. Và 1 lần nữa, bạn phải chỉ định thuộc tính nào bạn muốn ghi vào bảng tính đó. Nếu ví dụ của bạn, nếu bạn muốn hiển thị thanh (mà giá trị là mảng), cột sẽ được hiển thị có thể là [email protected], nhưng nó là một mảng, đúng. Nhưng nếu đối tượng là [{name: 'a', 'bar': [1,2,3]}, {name: 'b', 'bar': [2,3,4]}] và bạn muốn để chỉ hiển thị tên, nó khả thi, đúng không? – Jef

25

Bạn chỉ có thể chuyển đổi mảng JSON thành tệp CSV.

phép nói rằng, bạn có một JSON như sau:

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

Cho phép xem mã để chuyển đổi nó sang 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(); 
     }   
    } 

} 

Bây giờ bạn có CSV được tạo ra từ JSON.

Nó sẽ giống như thế này:

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

Các phụ thuộc maven là như thế nào,

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

Cảm ơn bạn về mã này nhưng tôi mới sử dụng Java và có vấn đề để làm cho nó hoạt động. Các biến 'jsonout' và' response' không được định nghĩa. Bất kỳ ý tưởng? Cảm ơn một lần nữa! – hhh

+0

FileUtils.writeStringToFile (tệp, csv); không được chấp nhận –

+0

có cách nào khác ngoài việc sử dụng org.json.CDL không? Dường như tôi không thể nhập lớp học đó vào dự án Android của tôi – keinabel

Các vấn đề liên quan