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

用Gson解析复杂的Json字符串

2015-07-27 15:35 489 查看
前提:自行将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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: