您的位置:首页 > Web前端 > JavaScript

Gson解析json数据

2016-04-07 14:23 330 查看
简介:

Json数据是类似xml类型的数据转化格式但是它的传输速率远远高于xml的解析速率。

这里简单的对用gson解析json格式的数据,为什么说是简单的介绍呢,因为博主有更简单的解析方式后期会进行推出或者扫描头像进

行私聊(公众号)。

进行集成:

 这里按照as为例进行集成,在对应model的gradle中加入

<span style="font-size:18px;">compile 'com.google.code.gson:gson:2.2.4'</span>
 如果是用eclipse的话可以进行下载gson架包放到libs文件夹下

 gson下载链接:点击打开链接

 源码下载:点击打开链接

 GitHub:点击打开链接

 既然是Json的解析那么先来一段json

<span style="font-size:18px;">http://apicloud.mob.com/boxoffice/day/query?key=11342cf45e16c&area=CN</span>
对应的数据格式是:

 

{
"msg": "success",
"retCode": "200",
"result": [
{
"cur": 1747.74,
"days": 5,
"name": "叶问3",
"sum": 53467.76
},
{
"cur": 1842.6,
"days": 5,
"name": "疯狂动物城",
"sum": 20840.64
},
{
"cur": 430.67,
"days": 30,
"name": "美人鱼",
"sum": 330737.57
}
]
}
这里显示的只是局部的,完整的json数据是这个

根据Json数据进行构建数据的Model记得反序列化当然不用可以。

public class Model implements Serializable {
private String msg;
private String retCode;
private List<ResultModel> results=new ArrayList<>();

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public String getRetCode() {
return retCode;
}

public void setRetCode(String retCode) {
this.retCode = retCode;
}

public List<ResultModel> getResults() {
return results;
}

public void setResults(List<ResultModel> results) {
this.results = results;
}
}


因为这个Json数据是JsonArray数组对象的不是JsonObject的单个对象所以出现集合List<ResultModel>下面是Resultodel的数据对象:

private double cur;
private int days;
private String name;
private double sum;

public void setCur(double cur) {
this.cur = cur;
}

public void setDays(int days) {
this.days = days;
}

public void setName(String name) {
this.name = name;
}

public void setSum(double sum) {
this.sum = sum;
}

public double getCur() {
return cur;
}

public int getDays() {
return days;
}

public String getName() {
return name;
}

public double getSum() {
return sum;
}


 数据的Json的解析:

 对了这里的网络请求引入了xUtils框架,后期将推出xUtils的框架学习,关于xUtils的框架集成

  1、AndroidStudio的集成:

   在对应的gradle下 

compile 'org.xutils:xutils:3.3.32'


 2、eclipse中:

  将xUtilts架包放进libs文件夹中进行add library

  xUtils框架,下载

  如果编辑后出现错误可参考我另外一篇博客,错误信息

 进行数据的获取:

  为Button设置点击事件进行获取Json数据然后把数据转化成对象

  

ic void getMovies(View view) {
String url = "http://apicloud.mob.com/boxoffice/day/query";
RequestParams params = new RequestParams();
params.addQueryStringParameter("key", "11342cf45e16c");
params.addQueryStringParameter("area", "CN");
HttpUtils httpUtils = new HttpUtils();
httpUtils.send(HttpRequest.HttpMethod.GET, url, params, new RequestCallBack<String>() {

@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.i("TAG", responseInfo.result);
Gson gson = new Gson();
//                Type listType = new TypeToken<LinkedList<Model>>(){}.getType();
Type type = new TypeToken<Model>() {}.getType();
Model model = gson.fromJson(responseInfo.result, type);
List<ResultModel> result = model.getResults();
Log.i("TAG", model.getRetCode());
Log.i("TAG", model.getMsg());
if ("success".equals("success")) {
for (int i = 0; i < result.size(); i++) {
Log.i("TAG", result.get(i).getCur() + "测试");
Log.i("TAG", result.get(i).getDays() + "");
Log.i("TAG", result.get(i).getName());
Log.i("TAG", result.get(i).getSum() + "");
}
}

}
这里做一下简单的解释关于下面两者的区别

gson.fromJson(responseInfo.result, type);
gson.fromJson(responseInfo.result, Model.class);
第一个表示的是当Json数据是JsonArray数组对象时,采用这种方式进行数据转化成对象,当数据是JsonObject对象时是使用第二种的比如下面
{
"msg": "success",
"result": {
"conclusion": "时来运转,事事如意,功成名就,富贵自来吉"
},
"retCode": "200"
}
这里就把Json数据转化成了对象Model model = gson.fromJson(responseInfo.result, type);,既然对象获取到了那么数据的获取就比较简单了。
博客开始时我说过只是做一下简单的介绍,对Gson的数据解析Json有更好的解决方案或者说是更好的方法,就是借用 Retrofit网络框架+Gson转化方式
好了,这期是博客就到这里了,写的比较仓促,如果发现错误或者描述不当还请多多包涵,zui'ho


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gson json 网络