Android-Gson小总

几乎每次项目中都要用到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();


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,466评论 25 709
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    wgl0419阅读 6,565评论 1 9
  • 大致分为两种方法:系统方法和自定义方法 系统方法: 系统自带的方法可以显示具体的消息数量,这个就是苹果设备常见的小...
    艳晓阅读 4,460评论 3 28
  • 你知道我为什么改名余子偕吗,我之前直接是我的名字,不,准确的说是你给我取的那个名字。而这个名字是我昨晚改的...
    余子偕阅读 835评论 0 1
  • 1.继续进行关系力和提升情商主题阅读,本周继续围绕《社交天性》主题进行,要求同第一周。 2.本周完成2组RIA便签...
    奕潼阅读 452评论 0 0

友情链接更多精彩内容