目前解析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);//北京
......
}