使用GSON有几个问题。我觉得GSON可能不是我想要的库,它可以给我一个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": "x@gmail.com",
"phone": "123-123-1233"
},
children: []
},{
id: "Christopher Johnson",
name: "Christopher Johnson",
data: {
"email": "x@gmail.com",
"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序列化。
答案 0 :(得分:2)
您是否尝试过默认的java JSONTokener
和其他类似的解析器?
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对象)模型
答案 1 :(得分:1)
让我给你一个提示
制作像这样的人和数据类(POJO)
Person
String id
String name
Data data
List<Person> children
Data
String email
String phone