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

Gson解析json详解

2016-04-14 13:00 232 查看
目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里开发的),Gson(Google出的),解析速度最快的是Gson,下载地址:https://code.google.com/p/google-gson/

什么是JSON:

JSON:JavaScript对象表示法(JavaScript Object Notation), 是一种轻量级的数据交换格式, 易于人阅读和编写, 同时也易于机器解析和生成。JSON是存储和交换文本信息的语法,类似XML。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言

JSON对象:

JSON中对象(Object)以"{"开始, 以"}"结束. 对象中的每一个item都是一个key-value对, 表现为"key:value"的形式, key-value对之间使用逗号分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON对象的key只能是string类型的, 而value可以是string,
number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.

JSON数组:

JSON数组(array)以"["开始, 以"]"结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如["coolxing", 24,?{"street":"huiLongGuan", "city":"beijing", "country":"china"}]。

Gson的基本使用方法:

下面我将以一个具体的列子来说明通过Gson方式解析json数据

1、将要解析的数据如下面的格式

{

"data": [

{

"children": [

{

"id": 10007,

"title": "北京",

"type": 1,

"url": "/10007/list_1.json"

},

{

"id": 10006,

"title": "中国",

"type": 1,

"url": "/10006/list_1.json"

},

{

"id": 10008,

"title": "国际",

"type": 1,

"url": "/10008/list_1.json"

},

{

"id": 10010,

"title": "体育",

"type": 1,

"url": "/10010/list_1.json"

},

{

"id": 10091,

"title": "生活",

"type": 1,

"url": "/10091/list_1.json"

},

{

"id": 10012,

"title": "旅游",

"type": 1,

"url": "/10012/list_1.json"

},

{

"id": 10095,

"title": "科技",

"type": 1,

"url": "/10095/list_1.json"

},

{

"id": 10009,

"title": "军事",

"type": 1,

"url": "/10009/list_1.json"

},

{

"id": 10093,

"title": "时尚",

"type": 1,

"url": "/10093/list_1.json"

},

{

"id": 10011,

"title": "财经",

"type": 1,

"url": "/10011/list_1.json"

},

{

"id": 10094,

"title": "育儿",

"type": 1,

"url": "/10094/list_1.json"

},

{

"id": 10105,

"title": "汽车",

"type": 1,

"url": "/10105/list_1.json"

}

],

"id": 10000,

"title": "新闻",

"type": 1

},

{

"id": 10002,

"title": "专题",

"type": 10,

"url": "/10006/list_1.json",

"url1": "/10007/list1_1.json"

},

{

"id": 10003,

"title": "组图",

"type": 2,

"url": "/10008/list_1.json"

},

{

"dayurl": "",

"excurl": "",

"id": 10004,

"title": "互动",

"type": 3,

"weekurl": ""

}

],

"extend": [

10007,

10006,

10008,

10014,

10012,

10091,

10009,

10010,

10095

],

"retcode": 200

}

2.必须定义如下一些的javaBean数据

package com.cyh.domain;

import java.util.List;

public class NewsCenterData

{

public int retcode;

public List<NewsData> data;

public class NewsData{

public List<ViewTagData> children;

public class ViewTagData{

public String id;

public String title;

public int type ;

public String url;

}

public String id;

public String title;

public int type;

public String url;

public String url1;

public String dayurl;

public String excurl;

public String weekurl;

}

public List<String> extend;

}

Bean定义注意事项:

1、内部嵌套的类必须是static的,要不然解析会出错;

2、类里面的属性名必须跟Json字段里面的Key是一模一样的;

3、内部嵌套的用[]括起来的部分是一个List,所以定义为 public List<xxx> x,List的泛型就用public xxx {};来表示,{}中的值取[]的并集。

3、然后具体的javabean定义好了就将解析数据了,下面就是我的解析数据类

protected void parseData(String jsonData) {

// google提供的json解析器

Gson gson = new Gson();

newsCenterData = gson.fromJson(jsonData,NewsCenterData.class);////取值的时候就从父类一层一层调子类成员(重要)

System.out.println(newsCenterData.data.get(0).children.get(0).title);//北京

......

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