2013-06-05 3 views
0

다음 구조체로 새 json 파일을 만들 필요가 있습니다. 구조체/배열 내부에 구조가 있기 때문에 성공할 수 없습니다.이 파일은 다음과 같이 표시되어야합니다. 어떻게 이런 식으로 하나를 만들 수 있습니까? ?깊은 배열로 JSON 파일 만들기

{ 

    "Entry1": [ 
     { 
      "id": "0001", 
      "type": "USER", 

     }, 
     { 
      "id": "0002", 
      "type": "EMP", 
     "property":"Salery", 

     } 

], 

"Entry2": [ 

    { 
     "id": "0005", 
     "name": "Vacation", 
     "property":"user", 

    }, 
    { 
     "id": "0008", 
     "name": "Work", 

     } 
    ] 

} 

다음 코드를 성공하지 못했습니다.

JSONObject obj = new JSONObject(); 
obj.put("entry1", null); 

JSONArray list = new JSONArray(); 
list.add("id"); 
list.add("USER"); 

....

답변

2

[업데이트] 나는 다른 json을 반환해야하므로 내 대답을 편집했습니다. 이것이 bes 해결책인지는 모르겠지만 작동하고 또한 읽고 유지하는 것이 분명합니다.

Anand에 따르면 대답은 Gson을 사용한 간단한 예입니다. POJO를 만들고 Gson/Jackson을 사용하여 json에 직렬화하는 것만 큼 훌륭한 솔루션이라고 생각합니다. json 객체를 수동으로 생성 할 필요는 없습니다.

JsonTest 메인 클래스 :

import java.util.ArrayList; 

import com.google.gson.Gson; 

public class JsonTest { 

    public static void main(String[] main) { 
     Entry entry1 = new Entry(); 
     entry1.setId(1); 
     entry1.setType("USER"); 
     entry1.setProperty("Salary"); 
     Entry entry2 = new Entry(); 
     entry2.setId(2); 
     entry2.setType("EMP"); 
     Entry entry3 = new Entry(); 
     entry3.setId(2); 
     entry3.setType("EMP"); 
     entry3.setProperty("Work"); 
     Entry entry4 = new Entry(); 
     entry4.setId(2); 
     entry4.setType("EMP"); 

     EntryListContainer entryListContainer = new EntryListContainer(); 
     ArrayList<Entry> entryList1 = new ArrayList<Entry>(); 
     ArrayList<Entry> entryList2 = new ArrayList<Entry>(); 

     entryList1.add(entry1); 
     entryList1.add(entry2); 
     entryList2.add(entry3); 
     entryList2.add(entry4); 

     entryListContainer.setEntryList1(entryList1); 
     entryListContainer.setEntryList2(entryList2); 

     String json = new Gson().toJson(entryListContainer, EntryListContainer.class); 
     System.out.println(json); 
    } 

} 

EntryListContainer 클래스 :

import java.util.ArrayList; 

import com.google.gson.annotations.SerializedName; 

public class EntryListContainer { 

    @SerializedName("Entry1") 
    private ArrayList<Entry> entryList1; 
    @SerializedName("Entry2") 
    private ArrayList<Entry> entryList2; 

    public void setEntryList1(ArrayList<Entry> entryList1) { 
     this.entryList1 = entryList1; 
    } 

    public ArrayList<Entry> getEntryList1() { 
     return entryList1; 
    } 

    public void setEntryList2(ArrayList<Entry> entryList2) { 
     this.entryList2 = entryList2; 
    } 

    public ArrayList<Entry> getEntryList2() { 
     return entryList2; 
    } 

} 

항목 POJO :

{ 

    "Entry1":[ 
     { 
      "id":1, 
      "type":"USER", 
      "property":"Salary" 
     }, 
     { 
      "id":2, 
      "type":"EMP" 
     } 
    ], 
    "Entry2":[ 
     { 
      "id":2, 
      "type":"EMP", 
      "property":"Work" 
     }, 
     { 
      "id":2, 
      "type":"EMP" 
     } 
    ] 

} 
,691 :이 JSON을 반환합니다

public class Entry { 

    private int id; 
    private String type; 
    private String property; 

    public void setId(int id) { 
     this.id = id; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    public String getType() { 
     return type; 
    } 

    public String getProperty() { 
     return property; 
    } 

    public void setProperty(String property) { 
     this.property = property; 
    } 

} 

+0

감사합니다. 소스가 무료입니까? 그렇다면 오류를 피하려면 항아리를 어떻게 얻을 수 있습니까? –

+0

물론 사용할 수 있습니다. 종속성을 해결하기 위해 gradle을 사용했지만 maven을 사용하거나 maven 중앙 저장소에서 jar를 다운로드하고 classpath에 추가 할 수 있습니다. Gson은 여기에서 다운로드 할 수 있습니다 http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.google.code.gson%22 ("다운로드 : column) – pepuch

+0

감사합니다. Patrick, 아직보고 싶습니다. 코드 어떻게 내가 항목 1 및 항목 2를 입력해야합니다 키 값 필드의 배열 부모 때 내가 그것을 인쇄 할 때 나는 entry1 & 2를 참조하십시오. –

2

시도 구글 GSON 프로젝트. 객체로부터 &으로 컨버팅하는 간단한 방법이 있습니다. 그것이 얼마나 깊은 지 상관하지 않습니다. 모든 컬렉션을 지원합니다.

[https://code.google.com/p/google-gson/][1]

+0

+1 동의합니다. 아난드, 몇 가지 예를 추가하면 좋을 것입니다. – pepuch

2

사용 Jackson. 당신도 POJO를의 목록을 직렬화 수 있도록, 심지어 어떤을 사용하지 않고, 또한 스마트 추측와 POJO에의 {드,} 직렬화 우수한 지원을 가지고

final JsonNodeFactory factory = JsonNodeFactory.instance; 

final ObjectNode baseNode = factory.objectNode(); 

ArrayNode array; 
ObjectNode element1, element2; 

// create elements 
element1 = factory.objectNode(); 
element1.put("id", whatever); 
// etc, then 

array = factory.arrayNode(); 
array.add(element1); 
array.add(element2); 
baseNode.put("Entry1"), array; 

// etc; then print baseNode.toString() in the file 

을 : 그것으로 임의의 JSON 값을 생성하는 것은 매우 간단하다 주석 (ObjectMapper 참조).

+0

고맙습니다. 잭슨에 대해이 항아리가 없으므로 코드를 사용할 때 오류가 발생합니다. 어떻게 추가 할 수 있습니까?이 소스는 무료입니까? –

+0

이중 라이센스 GPL/ASL입니다. 거기에 대한 maven 인공물이 있습니다. – fge

+0

그것은 내 회사에서 무료로 사용할 수없는 것은 무엇을 의미합니까? 내가 어떻게이 인공물을 얻을 수 있습니까? –