前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-Gson小总

Android-Gson小总

作者头像
android_薛之涛
发布2018-09-12 10:50:40
9650
发布2018-09-12 10:50:40
举报
文章被收录于专栏:Android-薛之涛

几乎每次项目中都要用到Gson来解析json数据,今天想做个总结。ok,现在我们先来了解一下JSONObject和JsonObject的区别(我个人总结了三点):上图。

可以一眼看到他们的不同:

(1)不同包。JSONObject是android自带的org.json包中,而JsonObject则是google.gson包下的需要添加build.gradle依赖:implementation'com.google.code.gson:gson:2.8.0'

 除此之外,我们先看看他们怎么存json数据吧,先看Android自带的JSONObject:

创建:

打印

打印结果:

总结,就是通过new JSONObject和JSONArray对象,让后put()进去即可。

我们看一看google推荐的gson是如何存储json数据的:

总结:JsonObject调用addProperty()添加value值,但如果添加的JsonArray则需要调用add()方法,这和android自带的JSONObject有点不同.也稍微麻烦点。

(2)第二个不同,我们都知道Android JSONObject是通过HashMap来存储key/value值,那么google的JsonObject是不是一样呢?上图:

这就是不同了:Anroid自带JSONObject是通过HashMap来存值而Google的JsonObject是通过LinkedTreeMap来存值,感兴趣的同学可以了解一下二者的区别.

(3)第三点不同,我们给之前的数据添加一个value为null的键值对。看两者的效果,上图:

打印结果:

总结:第三点不同就是:  Android自带的JSONObject如果value为null,会删除该键

                                        google的JsonObject如果value值为null,仍会保留该键

本人最近发现在高版本的gson中已经没有JsonObject了(比如2.8.5),但是有JsonReader可以继续解析,不知道是不是不推荐了,这里就不跟大家详聊了..

说完了区别,我们来说一说常见的Gson与各种类型的转化

 一:生成json

这个我们之前代码已经体现出来了:

值得一提的是:addProperty 方法底层调用的还是 add(String property, JsonElement value) ,他是将基本数据类型转化为了 JsonElement 对象,JsonElement 是一个抽象类,而 JsonObject 是继承了 JsonElement 的,所以我们可以通过 JsonObject 自己来构建一个 JsonElement。

如图:

打印:

数据结构:

如果我们JsonObject对象包含的key都叫name的话,我们就只会有一个name = "王五"的。只会保留最后一个。

二:json和数组之间的转化。

总结:其实就是gson.fromJson()和toJson()的调用

三:Json数组和List之间的转化

打印:

总结:其实还是调用gson.fromJson()和toJson()方法,只不过后面的参数不同,是通过TypeToken,最后getTyep();

好了常用的就这么多,剩下的比如:属性重命名,字段过滤啥的,不常用。以后用到再说吧,我去看世界杯了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.06.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说完了区别,我们来说一说常见的Gson与各种类型的转化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档