[英]Generic JSON parsing in Android
我有一个JSON
{
"info": {
"info1": {
"age": "30",
"city": "New york"
},
"info2": {
"sleeping": "false"
},
"info3": {
"shopping": "false",
"eating": "Buger"
}
},
"data": [{
"name": "XYZ",
"email": "xyz@123.com"
}, {
"name": "ABC",
"email": "ABC@123.com"
}]
}
我需要制作一个通用的解析器,并提取对象,数组和单个键对文本的名称。 我将使用这些值生成查询。 只有“ info”和“ data”标签将固定不变,其余所有都可以更改。 我们可以有空的“ info”,也可以有不同的子级,例如“ info1”,“ info2”。...“ info5” ...类似地,单个“ info”子级可以有多个子级,例如“ info1”可以有2个条目或4个条目。
我尝试使用杰克逊库,但无法遍历完整的json。
更新 :使用杰克逊2.7.2(最新)使用以下代码
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
JsonNode rootNode = mapper.readTree(jsonString);
Iterator<Map.Entry<String, JsonNode>> fieldsIterator = rootNode.fields();
while (fieldsIterator.hasNext()) {
Map.Entry<String, JsonNode> field = fieldsIterator.next();
System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue());
}
迭代了“ info”和“ data”键。 需要遍历完整的json。
JsonNode
可用于解析整个jsonObject。 JsonNode
get方法可用于遍历给定的JSON。
例如:
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(data);
JsonNode infoNode = rootNode.get("info");
Iterator<Map.Entry<String, JsonNode>> infoFieldsIterator = infoNode.fields();
while (infoFieldsIterator.hasNext()) {
Map.Entry<String, JsonNode> field = infoFieldsIterator.next();
System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue());
}
JsonNode dataNode = rootNode.get("data");
for (int i = 0; i < dataNode.size(); i++) {
JsonNode dataNodeNum = dataNode.get(i);
Iterator<Map.Entry<String, JsonNode>> dataFieldsIterator = dataNodeNum.fields();
while (dataFieldsIterator.hasNext()) {
Map.Entry<String, JsonNode> field = dataFieldsIterator.next();
System.out.println("Key: " + field.getKey() + "\tValue:" + field.getValue());
}
}
欲了解更多信息,请点击这里 。
为什么不尝试GSON。
https://github.com/google/gson
您可以在模型内部使用模型来实现所需的功能。
您需要做的就是使用gson序列化数据,如下所示
@SerializedName("info")
private infomodel info;
您可以创建一个称为信息模型的单独模型,其中包含其对象的序列化名称。
使用以下代码从json获取对象
Gson gson=new Gson();
Model yourModel=gson.fromJson(<your json object as string>);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.