如果你需要下载Gson(在Android studio中不需要下载加载添加即可)请到
中下载,或者在本文末端连接的源码中有。
Gson作为谷歌的亲儿子使用的还是比较广泛,下面将会完成一个利用Gson解析json的案例,因为做为测试用的,所以不做Android studio例子,而是在Eclipse中完成。但是代码是通用的。
案例概述:一个查询快递的源码
如果需要了解Gson的详细内容请看
json的内容
{
"message": "ok",
"nu": "612879710880",
"ischeck": "1",
"condition": "F00",
"com": "shunfeng",
"status": "200",
"state": "3",
"data": [
{
"time": "2017-03-14 12:48:19",
"ftime": "2017-03-14 12:48:19",
"context": "已签收,感谢使用顺丰,期待再次为您服务",
"location": "null"
},
{
"time": "2017-03-14 08:37:09",
"ftime": "2017-03-14 08:37:09",
"context": "快件交给杨玉麟,正在派送途中(联系电话:15920977099)",
"location": "null"
},
{
"time": "2017-03-14 07:54:49",
"ftime": "2017-03-14 07:54:49",
"context": "正在派送途中,请您准备签收(派件人:苏镜昌,电话:13924282546)",
"location": "null"
},
{
"time": "2017-03-14 07:26:34",
"ftime": "2017-03-14 07:26:34",
"context": "快件到达 【广州花都红棉大道营业部】",
"location": "【广州花都红棉大道营业部】"
},
{
"time": "2017-03-14 00:24:58",
"ftime": "2017-03-14 00:24:58",
"context": "快件在【广州新塘集散中心】已装车,准备发往 【广州花都红棉大道营业部】",
"location": "【广州花都红棉大道营业部】"
},
{
"time": "2017-03-13 20:21:24",
"ftime": "2017-03-13 20:21:24",
"context": "快件到达 【广州新塘集散中心】",
"location": "null"
},
{
"time": "2017-03-13 18:59:03",
"ftime": "2017-03-13 18:59:03",
"context": "快件在【广州天河广利路营业部】已装车,准备发往 【广州新塘集散中心】",
"location": "【广州天河广利路营业部】"
},
{
"time": "2017-03-13 18:01:07",
"ftime": "2017-03-13 18:01:07",
"context": "顺丰速运 已收取快件",
"location": "null"
}
]
}
我们需要实体类bean。但是创建起来很多,安利一个网站http://www.bejson.com/json2javapojo/new/
这里面可以是json直接生成bean,这样还可以保证不会输错名字,同时该网站还可以在线把json格式化
过程:打开http://www.bejson.com/json2javapojo/new/
在文本框中输入json内容。点击生成JavaBean即可,然后点击下载代码。
生成的类
JsonRootBean.class
public class JsonRootBean {
private String message;
private String nu;
private String ischeck;
private String condition;
private String com;
private String status;
private String state;
private List<Data> data;
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "JsonRootBean [message=" + message + ", nu=" + nu + ", ischeck=" + ischeck + ", condition=" + condition
+ ", com=" + com + ", status=" + status + ", state=" + state + "]";
}
public String getMessage() {
return message;
}
public void setNu(String nu) {
this.nu = nu;
}
public String getNu() {
return nu;
}
public void setIscheck(String ischeck) {
this.ischeck = ischeck;
}
public String getIscheck() {
return ischeck;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getCondition() {
return condition;
}
public void setCom(String com) {
this.com = com;
}
public String getCom() {
return com;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setData(List<Data> data) {
this.data = data;
}
public List<Data> getData() {
return data;
}
}
Data.class
public class Data {
private String time;
private String ftime;
private String context;
private String location;
public void setTime(String time) {
this.time = time;
}
public String getTime() {
return time;
}
@Override
public String toString() {
return "Data [time=" + time + ", ftime=" + ftime + ", context=" + context + ", location=" + location + "]";
}
public void setFtime(String ftime) {
this.ftime = ftime;
}
public String getFtime() {
return ftime;
}
public void setContext(String context) {
this.context = context;
}
public String getContext() {
return context;
}
public void setLocation(String location) {
this.location = location;
}
public String getLocation() {
return location;
}
}
GsonTest.class
public class GsonTest {
//访问网络 ,返回的是一个json内容
public static String downloadWeb(String url) // 截取的网页所有内�?
{
String result = ""; // 定义�?个字符串用来存储网页内容
BufferedReader in = null; // 定义�?个缓冲字符输入流
InputStream is = null;
try {
URL realUrl = new URL(url);
// 初始化一个链接到那个url的连�?
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
// 设置请求方法
connection.setDoInput(true); // 允许输入流,即允许下载
connection.setDoOutput(true); // 允许输出流,即允许上传
connection.setUseCaches(true); // 不使用缓冲
connection.setRequestMethod("GET"); // 使用get请求
// 获取输入流
is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
in = new BufferedReader(isr);
// 用来临时存储抓取到的每一行的数据
String line;
while ((line = in.readLine()) != null) {
// 遍历抓取到的每一行并将其存储到result里面
result += line;
}
} catch (Exception e) {
System.out.println("发�?�GET请求出现异常�?" + e);
e.printStackTrace();
} finally { // 使用finally来关闭输入流
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
try {
result = new String(result.getBytes(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
//http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号
//ps:快递公司编码:申通="shentong" EMS="ems" 顺丰="shunfeng" 圆通="yuantong" 中通="zhongtong" 韵达="yunda" 天天="tiantian" 汇通="huitongkuaidi" 全峰="quanfengkuaidi" 德邦="debangwuliu" 宅急送="zhaijisong"
String result = downloadWeb("http://www.kuaidi100.com/query?type=ems&postid=9890533739217");
Gson gson = new Gson();
JsonRootBean bean = gson.fromJson(result, JsonRootBean.class);
System.out.println(bean.toString());
List<Data>datas = bean.getData();
for(Data data:datas){
System.out.println("快递状态"+data.getContext());
}
}
}
运行结果
最后源码下载地址
http://download.csdn.net/download/qq_30034925/9813438