您的位置:首页 > 移动开发 > Android开发

Android学习之Json解析库Gson

2016-03-05 09:59 316 查看
接着上一篇Volley,在使用Volley加载好数据之后,我们肯定不能直接使用这个数据,一般获取的数据都会是Json格式,所以自然而然我们要处理下Json,网络上有很多Json解析库,这里我使用Gson来解析Json,Gson有个特点,就是要将数据的键作为变量封装到一个个实体中,如果值为数组的,变量的类型还必须是集合,然后通过Gson.fromJson来传入数据和实体类,再通过实体类的get方法来获取我们想要的数据,可以说是一个先苦后甜的过程。Gson其实用起来是很方便的,可能第一次觉得有点麻烦,用习惯了就发现它的好处了。废话不多说了,看个简单的Demo:

首先是导入Gson的Jar包,这里我用了gson-2.6.2.jar,讲其放入libs中,然后右键Add As Library即可,下载地址:
http://search.maven.org/#artifactdetails%7Ccom.google.code.gson%7Cgson%7C2.6.2%7Cjar
首先看下完整的数据:

{

"rating": {

"max": 10,

"numRaters": 348,

"average": "7.0",

"min": 0

},

"subtitle": "",

"author": [

"[日] 片山恭一"

],

"pubdate": "2005-1",

"tags": [

{

"count": 138,

"name": "片山恭一",

"title": "片山恭一"

},

{

"count": 65,

"name": "日本",

"title": "日本"

},

{

"count": 61,

"name": "日本文学",

"title": "日本文学"

},

{

"count": 38,

"name": "小说",

"title": "小说"

},

{

"count": 32,

"name": "满月之夜白鲸现",

"title": "满月之夜白鲸现"

},

{

"count": 15,

"name": "爱情",

"title": "爱情"

},

{

"count": 8,

"name": "純愛",

"title": "純愛"

},

{

"count": 8,

"name": "外国文学",

"title": "外国文学"

}

],

"origin_title": "",

"image": "https://img1.doubanio.com/mpic/s1747553.jpg",

"binding": "平装",

"translator": [

"豫人"

],

"catalog": "\n ",

"pages": "180",

"images": {

"small": "https://img1.doubanio.com/spic/s1747553.jpg",

"large": "https://img1.doubanio.com/lpic/s1747553.jpg",

"medium": "https://img1.doubanio.com/mpic/s1747553.jpg"

},

"alt": "http://book.douban.com/subject/1220562/",

"id": "1220562",

"publisher": "青岛出版社",

"isbn10": "7543632608",

"isbn13": "9787543632608",

"title": "满月之夜白鲸现",

"url": "http://api.douban.com/v2/book/1220562",

"alt_title": "",

"author_intro": "",

"summary": "那一年,是听莫扎特、钓鲈鱼和家庭破裂的一年。说到家庭破裂,母亲怪自己当初没有找到好男人,父亲则认为当时是被狐狸精迷住了眼,失常的是母亲,但出问题的是父亲……。",

"price": "15.00元"

}

接下来是实体:

/**
* tags
*
* @author yuzhentao
*/
public class Tag {

private String count;
private String name;
private String title;

public String getCount() {
return count;
}

public void setCount(String count) {
this.count = count;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

}

/**
* Book
*
* @author yuzhentao
*/
public class Book {

private String title;
private String publisher;
private String summary;
private ArrayList<Tag> tags;

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getPublisher() {
return publisher;
}

public void setPublisher(String publisher) {
this.publisher = publisher;
}

public String getSummary() {
return summary;
}

public void setSummary(String summary) {
this.summary = summary;
}

public ArrayList<Tag> getTags() {
return tags;
}

public void setTags(ArrayList<Tag> tags) {
this.tags = tags;
}

}

接下来是主界面:

/**
* 主界面
*
* @author yuzhentao
*/
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getData();
}
});
}

/**
* 获取数据
*/
private void getData() {
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url = "https://api.douban.com/v2/book/1220562";
StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("yuzhentao", "获取成功=" + response);
dealData(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("yuzhentao", "获取失败=" + error);
}
});
requestQueue.add(request);
}

/**
* 处理数据
*
* @param result:String
*/
private void dealData(String result) {
Gson gson = new Gson();
Book book = gson.fromJson(result, Book.class);
Log.e("yuzhentao", book.getTitle() + ":" + book.getPublisher() + ":" + book.getTags().size());
}

}

最后是效果,这里直接打印Log:

03-05 10:04:50.719 26924-26924/yuzhentao.gsondemo E/yuzhentao: 满月之夜白鲸现:青岛出版社:8

Demo地址:http://download.csdn.net/detail/qq_23940659/9467050
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: