Gson解析复杂的json数据
2016-03-18 10:05
411 查看
最近公司需要调用百度地图的API的WebService,调用百度地图的API的WebService返回的数据格式有两种:XML和JSON。由于JSON解析简便,原先本来打算使用普通的json解析方法即JsonObject和JsonArray的配合使用,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候这种方法就显得比较吃力也比较麻烦了,如果大家感兴趣的话网上有大量的实例可以到网上去看看。
在这里我将介绍解析json数据的另外一种方法就是通过Gson解析,对于解析比较简单的json数据我就不介绍了来一个比较复杂一点的json数据,如下面我们要解析的一个json数据:
如果使用JsonObject和JsonArray的配合起来使用也是可以解析的但是解析起来就比较麻烦了,如果使用Gson解析就比较简单了,首先我们需要定义一个序列化的Bean,这里采用内部类的形式,这样比较容易看得清晰些
首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:
很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
1、内部嵌套的类必须是static的,要不然解析会出错;
2、类里面的属性名必须跟Json字段里面的Key是一模一样的;
3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为 public C c,
具体的大家对照Json字符串看看就明白了,不明白的我们可以互相交流,本人也是开发新手!
然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!
如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。
下面我将以一个具体的列子来说明通过Gson方式解析复杂的json数据
1.将要解析的数据如下面的格式
2.必须定义如下一些的javaBean数据:(根据以上的JSON数据定义需要获取信息的bean)
BaiduMapJson.java
Result.java
然后具体的javabean定义好了就将解析数据了,下面是我使用Apache HttpClient调用百度地图WebService的逆地址编码服务的示例:
以下是参考学习地址:/article/7961985.html
在这里我将介绍解析json数据的另外一种方法就是通过Gson解析,对于解析比较简单的json数据我就不介绍了来一个比较复杂一点的json数据,如下面我们要解析的一个json数据:
String json = {"a":"100","b":[{"b1":"b_value1","b2":"b_value2"}, {"b1":"b_value1","b2":"b_value2"}],"c": {"c1":"c_value1","c2":"c_value2"}}
如果使用JsonObject和JsonArray的配合起来使用也是可以解析的但是解析起来就比较麻烦了,如果使用Gson解析就比较简单了,首先我们需要定义一个序列化的Bean,这里采用内部类的形式,这样比较容易看得清晰些
首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些:
public class JsonBean { public String a; public List<B> b; public C c; public static class B { public String b1; public String b2; } public static class C { public String c1; public String c2; } }
很多时候大家都是不知道这个Bean是该怎么定义,这里面需要注意几点:
1、内部嵌套的类必须是static的,要不然解析会出错;
2、类里面的属性名必须跟Json字段里面的Key是一模一样的;
3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<B> b,而只用{}嵌套的就定义为 public C c,
具体的大家对照Json字符串看看就明白了,不明白的我们可以互相交流,本人也是开发新手!
Gson gson = new Gson(); java.lang.reflect.Type type = new TypeToken<JsonBean>() {}.getType(); JsonBean jsonBean = gson.fromJson(json, type);
然后想拿数据就很简单啦,直接在jsonBean里面取就可以了!
如果需要解析的Json嵌套了很多层,同样可以可以定义一个嵌套很多层内部类的Bean,需要细心的对照Json字段来定义哦。
下面我将以一个具体的列子来说明通过Gson方式解析复杂的json数据
1.将要解析的数据如下面的格式
{ "status": 0, "result": { "location": { "lng": 113.37048902013, "lat": 23.140752999774 }, "formatted_address": "广东省广州市天河区中山大道西", "business": "棠下,天河公园,五山", "addressComponent": { "adcode": "440106", "city": "广州市", "country": "中国", "direction": "", "distance": "", "district": "天河区", "province": "广东省", "street": "中山大道西", "street_number": "", "country_code": 0 }, "poiRegions": [], "sematic_description": "广东邮电职业技术学院-教学楼西南68米", "cityCode": 257 } }
2.必须定义如下一些的javaBean数据:(根据以上的JSON数据定义需要获取信息的bean)
BaiduMapJson.java
public class BaiduMapJson { //调用百度地图API的状态码 /** * 调用成功 */ public static Integer STATUS_SUCC = 0; private String status; private Result result; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } }AddressComponent.java
public class AddressComponent { private String adcode; private String city; private String country; private String direction; private String distance; private String district; private String province; private String street; private String street_number; private String country_code; public String getAdcode() { return adcode; } public void setAdcode(String adcode) { this.adcode = adcode; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getDirection() { return direction; } public void setDirection(String direction) { this.direction = direction; } public String getDistance() { return distance; } public void setDistance(String distance) { this.distance = distance; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getStreet_number() { return street_number; } public void setStreet_number(String street_number) { this.street_number = street_number; } public String getCountry_code() { return country_code; } public void setCountry_code(String country_code) { this.country_code = country_code; } }
Result.java
public class Result { private AddressComponent addressComponent; public AddressComponent getAddressComponent() { return addressComponent; } public void setAddressComponent(AddressComponent addressComponent) { this.addressComponent = addressComponent; } }
然后具体的javabean定义好了就将解析数据了,下面是我使用Apache HttpClient调用百度地图WebService的逆地址编码服务的示例:
HttpClient httpclient = new DefaultHttpClient(); String Url = "http://api.map.baidu.com/geocoder/v2/?ak=" + baidumap_key + "&location=" + latitude + "," + longitude + "&output=json&pois=0"; HttpGet httpRequest = new HttpGet(Url); HttpResponse httpResponse = httpclient.execute(httpRequest); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { HttpEntity entitiy = httpResponse.getEntity(); String messBody = EntityUtils.toString(entitiy); if (messBody != null && messBody.length() >0) { Gson gson = new Gson(); //通过经纬度获取筛选信息 BaiduMapJson mapJson = gson.fromJson(messBody, BaiduMapJson.class); } }
以下是参考学习地址:/article/7961985.html
相关文章推荐
- @JsonView 简单介绍
- js中opener与parent的区别详细解析
- 身份证简单校验js正则表达式
- js正则表达式用法实例:验证邮箱格式、密码复杂度、手机号码、QQ号码
- 什么是JavaScript?
- Js中的window.parent ,window.top,window.self 详解
- [Sencha ExtJS & Touch] 什么是 callParent 和 callSuper ?
- 运算符优先级 (JavaScript)
- 详解Obejective-C中将JSON数据转为模型的方法
- JSON数据的解析
- json 字符串 对象 互转
- JavaScript包管理器综述
- Js与Jq获取浏览器和对象值的方法
- js遍历集合
- js热身
- 【菜鸟手打js】@弹出遮罩层显示大图之二
- Javascript贪食蛇小游戏
- htmlspecialchars和htmlentities对json数据的影响
- 【Three.js】入门-坐标系精讲
- 再看《JavaScript高级程序设计》第5章