2011-08-24 7 views
28

누구나 JSON 문서를 XLS/CSV 파일로 변환 할 수있는 샘플 Java 코드가 있습니까? Google에서 검색하려고했지만 아무 소용이 없습니다.Java에서 JSON을 XLS/CSV로 변환

+0

참조 매트 뉴욕의 대답 : http://stackoverflow.com/questions/662859/convert-csv -xls-to-json – JMax

+0

그는 Json에게 CSV를 요청하고 있습니다 ... 다른 방법은 없습니다. –

답변

-2

JSON 문서는 기본적으로 목록과 사전으로 구성됩니다. 이러한 데이터 구조를 2 차원 테이블에 매핑하는 분명한 방법은 없습니다.

+1

JSON 파일이 동일한 필드 이름을 가진 모든 객체와 함께 평면 배열 인 경우 2 차원 테이블로 매핑 할 수 있습니다. @ Sridhar의 예제 입력을 참조하십시오. –

3

commons csv를 사용하여 CSV 형식으로 변환 할 수 있습니다. POI를 사용하여 xls로 변환하십시오. 당신이 도우미를 xls로 변환해야한다면 jxls를 사용할 수 있습니다. 자바 빈 (또는리스트)을 표현식 언어로 변환 할 수 있습니다.

기본적으로 json 의사는 json 배열 일 수 있습니다. 맞습니까? 그래서 그것은 동일 할 것이다. 결과는 목록이 될 것이고, jxls가 읽을 Excel 형식으로 표시하려는 속성을 작성하기 만하면됩니다. http://jxls.sourceforge.net/reference/collections.html

문제가 jxls excel 속성에서 json을 읽을 수 없다면 먼저 java bean 컬렉션으로 serialize하면됩니다.

+0

'{ 'foo': { 'bar': [1, 2, 3]}}'을 스프레드 시트에 매핑하는 방법은 무엇입니까? –

+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 파일로 변환 할 수만 있습니다.

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(); 
     }   
    } 

} 

는 이제 CSV는 JSON에서 생성 된 가지고 :

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

은 CSV로 변환하는 코드를 볼 수 있습니다 :

는 다음과 같은 JSON을 가지고 말할 수 있습니다.

그것은 다음과 같아야합니다

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

받는다는 의존했다, 같은

<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

관련 문제