2012-06-25 191 views
1

使用GSON有幾個問題。我有一種感覺,GSON可能不是我正在尋找的能夠給我一個JSON對象的庫,我可以在以後使用它。GSON - 從Java創建JSON樹結構

我正在讀取數據庫中的數據以填充稍後將使用的json對象。 json對象的輸出應該類似於下面的json,它涉及父母和孩子。它形成了一個小的基於樹的結構:

var json = { 
     id: "1", 
     name: "Joe Smith", 
     data: { 
     "email": "", 
     "phone": "123-123-1233"}, 
     children: [{ 
         id: "Tim Anderson", 
         name: "Tim Anderson", 
         data: { 
          "email": "[email protected]", 
          "phone": "123-123-1233" 
         }, 
         children: [] 
        },{ 
         id: "Christopher Johnson", 
         name: "Christopher Johnson", 
         data: { 
          "email": "[email protected]", 
          "phone": "123-123-1233" 
         }, 
         children: [] 
        },{ 
         id: "Kate Green", 
         name: "Kate Green", 
         data: { 

         }, 
         children: [{ 
          id: "Gary Jones", 
          name: "Gary Jones", 
          data: {}, 
          children: [] 
         }, { 
          id: "Melissa Brand", 
          name: "Melissa Brand", 
          data: {}, 
          children: [] 
         }] 
        } 
        ] 
    } 

如何創建一個GSON對象,類似於上面的結構,我可以序列具有此類型層次的JSON?我試過使用地圖和其他收藏 - 但我很難得到我想要的結果。因此,爲什麼我問GSON是否是我真正想要的JSON序列化。

回答

2

讓我給你一個提示

作出這樣

Person 
    String id 
    String name 
    Data data 
    List<Person> children 

Data 
    String email 
    String phone 
+1

謝謝 - 我知道我可以使用POJO對象在一棵樹上創建節點的實例。我可以在GSON序列化中使用這些對象嗎? – user82302124

+0

@ K82_Med是的。你可以使用它們來序列化和反序列化。 – Nishant

+0

謝謝 - 我已經知道我要去哪裏了,謝謝你的回答。謝謝你的提示。 – user82302124

2

您是否嘗試默認的Java JSONTokener和其他類似的語法分析器的人士及數據類(POJO)?

 BufferedReader reader = new BufferedReader(new FileReader("jsonfile.json")); 
    StringBuilder builder=new StringBuilder(); 
    for(String line=null;(line = reader.readLine()) != null;){ 
    builder.append(line).append("\n"); 
    } 
    JSONTokener jsonTokener=new JSONTokener(builder.toString()); 
    JSONObject finalJson=new JSONObject(jsonTokener); 

在你的情況,如果你想找到在內部層次結構的其他數據,然後遍歷 如下

JSONArray children=finalJson.getJSONArray("children"); 
for(int i = 0;i<children.length;i++){ 
JSONObject childRecData = children.getJSONObject(i); //returns the ith JSONObject containing id, name, data, etc. 
int id = childRecData.getString(); 
String name = childRecData.getString(); 
JSONObject data = childRecData.getJSONObject(0); 
} 

注意,對於較大的JSON文件(文件,這有荒唐的程度如HTTP數據庫請求建議由Nishant建議的GSON的POJO(普通舊Java對象)模型

這裏的more information

這裏是一個similar question