前提:自行将Gson开源库导入到工程中(不会的,请自行百度)。
这是本人第一次写博客,如有错误,请您见谅,也欢迎与我交流!
需要解析的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