2012-06-25 186 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