用Gson解析复杂的Json字符串
2015-07-27 15:35
489 查看
前提:自行将Gson开源库导入到工程中(不会的,请自行百度)。
这是本人第一次写博客,如有错误,请您见谅,也欢迎与我交流!
需要解析的Json字符串为:
json字符串的标准格式:
![](http://img.blog.csdn.net/20150727152622512)
分析该Json字符串:
最外面一层是Json对象(我们用FuZaResult 类表示),其中result的值又是一个Json对象(One 类表示),其中(Json对象(One 类表示))又含有一个Json数组(Info 类表示);当然该Json字符串本来就可以用纯Json解析,这不是本博客需要讲解的。
第一步:定义关于Json字符串的JavaBean类(关键点):
定义JavaBean类需要注意的几点:
如何定义这个待解析成的类?其实很简单,看到JSON结构里面有{}你就定义一个类,看到[]你就定义一个List即可,最后只剩下最简单的如String、int等基本类型直接定义就好。
内部嵌套的类,请使用public static classclassName { }。
类内部的属性名,必须与JSON串里面的Key名称保持一致。这三点请自行对照我们上面举的Result的例子,都有对应。
关于Json字符串的JavaBean类:
二。测试的关键代码:
//json表示该json字符串(一般是通过URL访问网络得到)
FuZaResultfzr=(ShengFenResult) new Gson().fromJson(json,
ShengFenResult.class);
Listlist=fzr.getResult().getData();
if (list !=null) {
//打印该Json字符串中数组的各个元素
for (FuZaResult.One.Infoelement: list) {
System.out.println(element);
}
}else{
System.out.println(“list为空”);
}
三。测试的输出
输出两条结果:就是以toString()的方法输出Info对象;也就是该Json字符串中的数组元素。
本人联系QQ:840284038
这是本人第一次写博客,如有错误,请您见谅,也欢迎与我交流!
需要解析的Json字符串为:
{ "error_code": 0, "reason": "Success", "result": { "data": [{ "content": "欠揍了吧", "hashId": "40EEB30C5EB72DF9053B74A492F475C7","unixtime": 1437203604, "updatetime": "2015-07-18 15:13:24", "url":"http://img.juhe.cn/joke/201507/18/40EEB30C5EB72DF9053B74A492F475C7.jpg"}, { "content": "你是怎么进去的", "hashId":"49E82DC094FBE77E51808EA30F15ED37", "unixtime": 1437203046,"updatetime": "2015-07-18 15:04:06", "url":"http://img.juhe.cn/joke/201507/18/49E82DC094FBE77E51808EA30F15ED37.jpg"}, ] } }
json字符串的标准格式:
分析该Json字符串:
最外面一层是Json对象(我们用FuZaResult 类表示),其中result的值又是一个Json对象(One 类表示),其中(Json对象(One 类表示))又含有一个Json数组(Info 类表示);当然该Json字符串本来就可以用纯Json解析,这不是本博客需要讲解的。
第一步:定义关于Json字符串的JavaBean类(关键点):
定义JavaBean类需要注意的几点:
如何定义这个待解析成的类?其实很简单,看到JSON结构里面有{}你就定义一个类,看到[]你就定义一个List即可,最后只剩下最简单的如String、int等基本类型直接定义就好。
内部嵌套的类,请使用public static classclassName { }。
类内部的属性名,必须与JSON串里面的Key名称保持一致。这三点请自行对照我们上面举的Result的例子,都有对应。
关于Json字符串的JavaBean类:
importjava.io.Serializable; import java.util.List; public class FuZaResult implements Serializable { private static final long serialVersionUID =898054796034620206L; private int error_code; //变量名要与字符串中的一致且区分大小写 private String reason; //One类名可以自行定义,但变量名一定是result private One result; public static class One implements Serializable { private static final long serialVersionUID =3160756517989567372L; //定义内嵌的json数组 private List data; //Info类名可以自行定义,但变量名一定是data //定义该字符串中数组的元素 public static class Info implements Serializable { private static final long serialVersionUID =-6703546543794327314L; private String content; private String hashId; private long unixtime; private String updatetime; private String url; public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getHashId() { return hashId; } public void setHashId(String hashId) { this.hashId = hashId; } public long getUnixtime() { return unixtime; } public void setUnixtime(long unixtime) { this.unixtime = unixtime; } public String getUpdatetime() { return updatetime; } public void setUpdatetime(String updatetime) { this.updatetime = updatetime; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @Override public String toString() { return "content: " + getContent() + " hashId:" + getHashId() + " unixtime:" + getUnixtime() + " updatetime:" + getUpdatetime() + " url:" +getUrl(); } } public List getData() { return data; } public void setData(List data) { this.data = data; } } public int getError_code() { return error_code; } public void setError_code(int error_code) { this.error_code = error_code; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public One getResult() { return result; } public void setResult(One result) { this.result = result; } }
二。测试的关键代码:
//json表示该json字符串(一般是通过URL访问网络得到)
FuZaResultfzr=(ShengFenResult) new Gson().fromJson(json,
ShengFenResult.class);
Listlist=fzr.getResult().getData();
if (list !=null) {
//打印该Json字符串中数组的各个元素
for (FuZaResult.One.Infoelement: list) {
System.out.println(element);
}
}else{
System.out.println(“list为空”);
}
三。测试的输出
输出两条结果:就是以toString()的方法输出Info对象;也就是该Json字符串中的数组元素。
本人联系QQ:840284038
相关文章推荐
- js 求时间差 字符串转化为日期
- 用JavaScript获取一个超链接的绝对URL地址
- 10款面向HTML5 画布(Canvas)的JavaScript库
- 返回函数的JavaScript函数
- JavaScript(一)
- net.sf.json.JSONException: Positioned Update not supported.
- js实现邮箱地址的检测
- 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
- JS相关知识记录
- js之事件冒泡和事件捕获详细介绍
- js验证日期格式
- JavaScript实现页面图片预加载
- js Grid - 列表插件
- 在JS中遇到===比较
- js中的排序小案例
- js操作cookies
- 用JavaScript获取一个超链接的绝对URL地址
- jsp中,ajax提交表单用法 分类: ajax 2011-07-29 14:59 3746人阅读 评论(0) 收藏 举报 jspajaxinputbuttonactionfunction 一:
- javascript专业八级测试答案整理
- js正则表达式之中文验证(转)