ObjectMapper.readTree()和JsonNode.get()的结合使用
渐次反序列化该方法可以只将用户感兴趣的Json串信息值提取出来。主要利用ObjectMapper提供的readTree和Jackson提供的JsonNode类来实现。String test = "{"results":[{"objectID":357,"geoPoints":[{"x":504604.59802246094,"y":305569.9150390625}]},{"objectID":
·
渐次反序列化
该方法可以只将用户感兴趣的Json串信息值提取出来。主要利用ObjectMapper提供的readTree和Jackson提供的JsonNode类来实现。
String test = "
{"results":[{"objectID":357,
"geoPoints":[{"x":504604.59802246094,"y":305569.9150390625}]},
{"objectID":358,
"geoPoints":[{"x":504602.2680053711,"y":305554.43603515625}]}]}
";
此Json串比较复杂,包含了嵌套数组的形式,具有通用性。
实现反序列化:
JsonNode node= objectMapper.readTree(test); //将Json串以树状结构读入内存
JsonNode contents=node.get("results");//得到results这个节点下的信息
for(int i=0;i<contents.size();i++){ //遍历results下的信息,size()函数可以得节点所包含的的信息的个数,类似于数组的长度
System.out.println(contents.get(i).get("objectID").getIntValue()); //读取节点下的某个子节点的值
JsonNode geoNumber=contents.get(i).get("geoPoints");
for(int j=0;j<geoNumber.size();j++){ //循环遍历子节点下的信息
System.out.println(geoNumber.get(j).get("x").getDoubleValue()+" "+geoNumber.get(j).get("y").getDoubleValue());
}
}
在控制台下输出的结果是:
357
504604.59802246094 305569.9150390625
358
504602.2680053711 305554.43603515625
此方法类似于XML解析中的DOM方式解析,其好处是结构明细,便于提取想要的信息。当然,其缺点也和此方法一样:耗时费空间。
关于json数据的其他序列化和反序列化操作可参考链接
更多推荐
已为社区贡献5条内容
所有评论(0)