2013-06-05 125 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。我不知道這是否是解決方案,但它的工作原理,也很清楚,閱讀和維護。

據阿南德答案這裏是用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:

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

} 

它將返回該JSON:

{ 

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

} 
+0

謝謝,是它的源免費的嗎?如果是的,我怎麼能得到罐,以避免錯誤? –

+0

是的,當然,你可以使用它。我使用gradle來解決依賴關係,但你也可以使用maven或者從maven central repository下載jar並添加到classpath中。 Gson可以從這裏下載http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.google.code.gson%22(「download:column) – pepuch

+0

謝謝帕特里克,我還是想念代碼我應該如何把條目1和條目2這是鍵值字段的數組的父項,因爲當我打印它時,我沒有看到entry1&2 –

2

嘗試谷歌GSON項目。它有一個簡單的方法來從物體上剔除到&。不管它有多深。支持所有集合。

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

+0

+1我同意。阿南德,如果你會添加一些例子,這將是非常棒的。 – pepuch

2

使用Jackson。這是非常簡單,它創建任意JSON值:

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 

它還具有針對POJO的{德,}系列化出色的支持,智能的猜測,所以你甚至可以反序列化的POJO的名單,甚至沒有使用任何註釋(請參閱ObjectMapper)。

+0

謝謝,當我用你的代碼,我有錯誤,因爲我沒有這個罐子傑克遜,我怎麼能增加嗎?這是免費的來源? –

+0

它是雙重授權的GPL/ASL。有它等 – fge

+0

是什麼意思,我不能用它在我公司免費行家文物?我怎樣才能得到這個Maven工件? –