Android JSON:Gson,FastJson解析库的使用和对比分析

“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元”

}

下面我们在Android进行解析。

Project中总共有三个类:MainActivity.java , Book.java , Tag.java

public class MainActivity extends Activity {

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() {

@Override

public void onResponse(String arg0) {

Log.i(“info”, arg0);

dealData(arg0);

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError arg0) {

// TODO Auto-generated method stub

}

});

// 将请求加入队列

new Volley().newRequestQueue(getApplicationContext()).add(request);

}

private void dealData(String result) {

Gson gson = new Gson();

Book book = gson.fromJson(result, Book.class);

Log.i(“info”, book.getTitle() + “:” + book.getPublisher() + “:”

  • book.getTags().size()); // 这里打印了tags的个数

}

}

// Log日志结果是 满月之夜白鲸现:青岛出版社:8

// 对象的变量名要与json中的相对应,这里只是选取了json中的几个“变量”进行解析

public class Book {

private String title;

private String publisher;

private String summary;

private ArrayList 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 getTags() {

return tags;

}

public void setTags(ArrayList tags) {

this.tags = tags;

}

}

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;

}

}

3. FastJson的基本用法
1) Fastjson中的经常调用的方法

// 把JSON文本parse为JSONObject或者JSONArray

public static final Object parse(String text);

// 把JSON文本parse成JSONObject

public static final JSONObject parseObject(String text);

// 把JSON文本parse为JavaBean

public static final T parseObject(String text, Class clazz);

// 把JSON文本parse成JSONArray

public static final JSONArray parseArray(String text);

//把JSON文本parse成JavaBean集合

public static final List parseArray(String text, Class clazz);

// 将JavaBean序列化为JSON文本

public static final String toJSONString(Object object);

// 将JavaBean序列化为带格式的JSON文本

public static final String toJSONString(Object object, boolean prettyFormat);

// 将JavaBean转换为JSONObject或者JSONArray。

public static final Object toJSON(Object javaObject);

  1. 如何使用FastJson
  • 服务器端使用Fastjson将数据转换成json字符串

主要使用的函数如下:

public static String createJsonString(Object value)

{

String alibabaJson = JSON.toJSONString(value);//此处转换

return alibabaJson;

}

  • 客户端将从服务器端获取到的json字符串转换为相应的javaBean,

下面给以写核心的函数例子,供参考:

public static String getJsonContent(String urlStr) {

try {

// 获取HttpURLConnection连接对象

URL url = new URL(urlStr);

HttpURLConnection httpConn = (HttpURLConnection) url

.openConnection();

// 设置连接属性

httpConn.setConnectTimeout(3000);

httpConn.setDoInput(true);

httpConn.setRequestMethod(“GET”);

// 获取相应码

int respCode = httpConn.getResponseCode();

if (respCode == 200) {

return ConvertStream2Json(httpConn.getInputStream());

}

} catch (IOException e) {

e.printStackTrace();

}

return “”;

}

private static String ConvertStream2Json(InputStream inputStream) throws IOException {

String jsonStr = “”;

// ByteArrayOutputStream相当于内存输出流

ByteArrayOutputStream out = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

// 将输入流转移到内存输出流中

while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {

out.write(buffer, 0, len);

}

// 将内存流转换为字符串

jsonStr = new String(out.toByteArray());

return jsonStr;

}

  1. 使用泛型获取javaBean(核心函数)

public static T getPerson(String jsonString, Class cls) {

T t = null;

t = JSON.parseObject(jsonString, cls);

return t;

}

public static List getPersons(String jsonString, Class cls) {

List list = new ArrayList();

list = JSON.parseArray(jsonString, cls);

return list;

}

4. FastJson的实例解析

只需在“Gson的实例解析中”修改dealData(String result)方法即可。

private void dealData(String result) {

Book book = JSON.parseObject(result, Book.class);

List books = JSON.parseObject(result,

new TypeReference<List>() {

});

Book book1 = new Book();

book1.setTitle(“biaoti”);

Book book2 = new Book();

book2.setTitle(“biaoti”);

Book book3 = new Book();

book2.setTitle(“biaoti”);

List list = new ArrayList();

list.add(book1);

list.add(book2);

list.add(book3);

JSON.toJSON(list);

Log.i(“info”, book.getTitle() + “:” + book.getPublisher() + “:”

  • book.getTags().size());

}

三、Gson的知识点补充

1. toJson()方法

toJson()方法用于将Java对象转换为相应的JSON数据,主要有以下几种形式:

(1)String toJson(JsonElement jsonElement);

(2)String toJson(Object src);

(3)String toJson(Object src, Type typeOfSrc);

其中,方法(1)用于将JsonElement对象(可以是JsonObject、JsonArray等)转换成JSON数据;

方法(2)用于将指定的Object对象序列化成相应的JSON数据;

方法(3)用于将指定的Object对象(可以包括泛型类型)序列化成相应的JSON数据。

2. fromJson()方法

fromJson()方法用于将JSON数据转换为相应的Java对象,主要有以下几种形式:

(1) T fromJson(JsonElement json, Class classOfT);

最后

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

系列教程图片

2020Android复习资料汇总.png

flutter

NDK

设计思想开源框架

微信小程序
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2. fromJson()方法

fromJson()方法用于将JSON数据转换为相应的Java对象,主要有以下几种形式:

(1) T fromJson(JsonElement json, Class classOfT);

最后

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

[外链图片转存中…(img-eRWBzyNx-1714651575446)]

[外链图片转存中…(img-CuaLaLWx-1714651575447)]

[外链图片转存中…(img-CAg75a1X-1714651575447)]

[外链图片转存中…(img-P8X1zeYB-1714651575447)]

[外链图片转存中…(img-tTurXG2G-1714651575448)]

[外链图片转存中…(img-PjBeobfW-1714651575448)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值