我必须在这样的结构中解析webService返回的JSON字符串:
{
"catList" : {
"1" :{
"name" : "NAME",
"qty" : "QTY",
"groupList" : {
"40" : {
"name" : "NAME",
"qty" : "QTY",
"subjectList" : {
"1" : {
"name" : "NAME",
"qty" : "QTY",
},
"5" : {
"name" : "NAME",
"qty" : "QTY",
},
...
},
"45" : {
"name" : "NAME",
"qty" : "QTY",
"subjectList" : {
"23" : {
"name" : "NAME",
"qty" : "QTY",
},
"45" : {
"name" : "NAME",
"qty" : "QTY",
},
...
},
...
"2" :{
"name" : "NAME",
"qty" : "QTY",
"groupList" : {
"142" : {
"name" : "NAME",
"qty" : "QTY",
"subjectList" : {
"86" : {
"name" : "NAME",
"qty" : "QTY",
},
"23" : {
"name" : "NAME",
"qty" : "QTY",
},
...
},
"7" : {
"name" : "NAME",
"qty" : "QTY",
"subjectList" : {
"98" : {
"name" : "NAME"
"qty" : "QTY"
},
"08" : {
"name" : "NAME"
"qty" : "QTY"
}
},
...
},
...
"3" :{SAME OTHERS},
"4" :{SAME OTHERS},
"5" :{SAME OTHERS},
"6" :{SAME OTHERS},
"7" :{SAME OTHERS},
"8" :{SAME OTHERS},
"9" :{SAME OTHERS},
}
我不知道怎么样?!我有一些像这样的类:
public class CatList {
private String name;
private String qty;
private JSONObject groupList;
}
public class GroupList {
private String name;
private String qty;
private JSONObject subjectList;
}
public class SubjectList {
private String name;
private String qty;
}
但是因为groupLists和subjectList有随机标题我不知道如何识别它们。 这可能吗?我能怎么做?请帮忙
答案 0 :(得分:3)
我建议你改变服务器返回的JSON结构,因为这是糟糕的设计:)
无论如何,这是我使用Jackson库的工作示例。 示例json住在这里:https://dl.dropbox.com/u/6129677/json_test.json 请注意,我已删除“catList”,只是离开了类别列表(请参阅json)。
Category.java:
public class Category {
private String name;
private String qty;
private Map<String, Group> groupList;
@JsonProperty("groupList")
public Map<String, Group> getGroupList() {
return groupList;
}
@JsonProperty("groupList")
public void setGroupList(Map<String, Group> groupList) {
this.groupList = groupList;
}
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
@JsonProperty("qty")
public String getQty() {
return qty;
}
@JsonProperty("qty")
public void setQty(String qty) {
this.qty = qty;
}
}
Group.java
public class Group {
private String name;
private String qty;
private Map<String, Subject> subjectList;
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
@JsonProperty("qty")
public String getQty() {
return qty;
}
@JsonProperty("qty")
public void setQty(String qty) {
this.qty = qty;
}
@JsonProperty("subjectList")
public Map<String, Subject> getSubjectList() {
return subjectList;
}
@JsonProperty("subjectList")
public void setSubjectList(Map<String, Subject> subjectList) {
this.subjectList = subjectList;
}
}
Subject.java
public class Subject {
private String name;
private String qty;
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
@JsonProperty("qty")
public String getQty() {
return qty;
}
@JsonProperty("qty")
public void setQty(String qty) {
this.qty = qty;
}
}
将JSON编组到我们的对象:
try {
ObjectMapper om = new ObjectMapper();
Map<String, Category> catMap = om.readValue(getAssets().open("json_test.json"), new TypeReference<Map<String, Category>>() {
});
} catch (IOException e) {
e.printStackTrace();
}
因此,您将获得Map对象。
答案 1 :(得分:0)
您知道http://json.org/java/项目。
我在网络应用中使用此lib,它可能适用于您的情况。
答案 2 :(得分:0)
我建议您在项目中使用 Jackson ,并为要尝试反序列化的JSON创建类类型。
答案 3 :(得分:0)
如果你浏览JSON对象数组并使用getName()方法取名?或者,使用库http://jackson.codehaus.org/?
答案 4 :(得分:0)
答案 5 :(得分:-1)
我会在这里发布这个答案,因为它很清楚,而不是隐藏在评论部分。
JSONObject jsonObject = search.getJSONObject("object_key");
Iterator jsonObjectKeys = jsonObject.keys();
while(jsonObjectKeys.hasNext()) {
String currentDynamicKey = (String)keys.next();
JSONObject currentDynamicValue = jsonObject.getJSONObject(currentDynamicKey);
//do what you need to do with the data here
}