JSON是我们在实际开发最常用的数据交换格式,GSON则是谷歌提供的用来解析Json数据的一个Java类库,在进行Gson介绍之前我们通过以下几个部分对Gson进行深入的了解。
一、JSON的简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。用于数据转化传输,通用于PHP、Java、C++、C#、Python等编程语言的数据交换传输。它易于人阅读和编写,同时也易于机器解析和生成。
基本结构:对象、数组
二、GSON简介和特点
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
特点:a、快速、高效
b、代码量少、简洁
c、面向对象
d、数据传递和解析方便
三、GSON的基本使用
Json数据如下:
{
"rating": {
"max": 10,
"numRaters": 348,
"average": "7.0",
"min": 0
},
"subtitle": "",
"author": [
"[日] 片山恭一"
],
"pubdate": "2005-1",
"tags": [
{
"count": 136,
"name": "片山恭一",
"title": "片山恭一"
},
{
"count": 63,
"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": "
",
"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元"
}
我们解析出其中的title、publisher、summary和数组tags。
1、创建一个android工程,并在AndroidManifest.xml文件上添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
MainActivity类:
package com.example.gsondemo;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.widget.Toast;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.bean.Book;
import com.example.bean.Tag;
import com.google.gson.Gson;
public class MainActivity extends ActionBarActivity
{
//请求接口
private String url = "https://api.douban.com/v2/book/1220562";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();
}
/**
* 获取网络数据
*/
private void getData()
{
//创建请求对象
StringRequest request = new StringRequest(url, new Listener<String>() {
@Override
public void onResponse(String response)
{
Log.e("info", response);
dealData(response);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error)
{
Toast.makeText(MainActivity.this, "网络请求出错", Toast.LENGTH_SHORT).show();
}
});
//把请求对象加入请求队列里面
new Volley().newRequestQueue(getApplicationContext()).add(request);
}
public void dealData(String result){
//实例化Gson对象
Gson gson = new Gson();
//把json字符串转化为对象
Book book = gson.fromJson(result, Book.class);
ArrayList<Tag> list = book.getTags();
for (int i = 0; i < list.size(); i++)
{
Tag tag = list.get(i);
Log.e("name", tag.getName());
}
Toast.makeText(MainActivity.this, "标题:" + book.getTitle() + " 出版社:" + book.getPublisher()
+ " Tag:" + book.getTags().size(), 1).show();
}
}
实体类Book:
package com.example.bean;
import java.util.ArrayList;
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;
}
}
Tag类:
package com.example.bean;
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;
}
}
好了,GSON的使用就是那么简单。