首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你应该知道的kotlin实用技巧

reified,通过添加类型传递简化泛型参数 这样就不用手动传泛型的类型过去了 Gson解析例子 我们首先看下一般我们使用gson解析json是怎么做的 在Java序列化库(如Gson)中,当您想要反序列化该...JSON字符串,您最终必须将Class对象作为参数传递,以便Gson知道您想要的类型。...,在我们的Kotlin代码中,我们可以反序列化JSON字符串,甚至根本不需要传递类型信息!...val user: User = Gson().fromJson(json) Kotlin根据它的用法推断出类型 - 因为我们将它分配给User类型的变量,Kotlin使用它作为fromJson()的类型参数...这一特性在您需要在其他对象间复用 getter/setter 逻辑十分有用,同时也能让您可以轻松地对简单支持字段的功能进行扩展 举个例子,利用委托属性可以封装SharedPreference 数据存储操作委托给代理有几个好处

1.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin 开发中遇到的坑(持续更新)

因此,当getStringExtra返回null,给mHomeWorkId赋值,就会报错。...我们在写这段代码的时候想的可能是:当mUser不为null,而且年级不是-1的时候,通过条件判断,然后做一下操作。 但是在kotlin中,当mUsernull,mUser?....grade的取值null,而null != -1 ,在kotlin是成立的,这就不符合我们实际逻辑了。 解决方法如下:通过 ?: 操作,当mUser等于null,给左边 一个默认值。...(person.name) 我们传递了一个json字符串,但是没有包含keyname的值,并且注意: 在Person中name的类型是String,也就是说是不允许name=null的 输出结果: null...解析json,如果bean继承了父并在主构造函数中覆盖了父的属性,那么会报错:declares multiple JSON fields named name(声明多个名为name的JSON字段

4.3K02

Kotlin入门(31)JSON字符串解析

toString : 把当前JSONObject输出一个json字符串。...使用JSONObject和JSONArray对json串进行手工解析,处理过程比较常规,完成该功能的Kotlin代码与Java代码大同小异。...Gson的各种处理方法了,Gson常用的方法有两个,一个名叫toJson,可把数据对象转换为json字符串;另一个名叫fromJson,可将json字符串自动解析数据对象,方法调用的代码格式“fromJson...Kotlin数据定义代码尚且只有一行,这里的json串自动解析仍旧只需一行代码,实实在在为开发者节省了不少功夫。...{             //利用Gson包直接json解析对应格式的数据对象             val newUser = Gson().fromJson(json, UserInfo

4.1K20

你应该知道的kotlin实用技巧

reified,通过添加类型传递简化泛型参数 这样就不用手动传泛型的类型过去了 Gson解析例子 我们首先看下一般我们使用gson解析json是怎么做的 在Java序列化库(如Gson)中,当您想要反序列化该...JSON字符串,您最终必须将Class对象作为参数传递,以便Gson知道您想要的类型。...,在我们的Kotlin代码中,我们可以反序列化JSON字符串,甚至根本不需要传递类型信息!...val user: User = Gson().fromJson(json) Kotlin根据它的用法推断出类型 - 因为我们将它分配给User类型的变量,Kotlin使用它作为fromJson()的类型参数...这一特性在您需要在其他对象间复用 getter/setter 逻辑十分有用,同时也能让您可以轻松地对简单支持字段的功能进行扩展 举个例子,利用委托属性可以封装SharedPreference 数据存储操作委托给代理有几个好处

1.4K00

一个实例学习Kotlin 开发 Android App 的全过程(内有代码)

例如,地区列表是从服务端获取的JSON数据,因此,需要有相应的来完成从网络上获取数据的工作,而且获取的是JSON格式的数据。因此,在使用这些数据之前,需要先将其转换为Kotlin。...:String, var cityCode:String) 处理JSON格式的城市列表信息 当JSON格式的数据从服务端获取后,需要对这些数据进行解析。...Kotlin代码(解析JSON格式的数据) object Utility { // 解析和处理服务器返回的省级数据 fun handleProvinceResponse(response:...JSON数据解析成Weather实体 fun handleWeatherResponse(response: String): Weather?...第4个方法用于分析描述天气信息的JSON数据,而且未使用Android SDK标准的API进行分析,而是使用gson开源库对JSON数据进行分析,并返回一个Weather对象,Weather与其他相关的定义需要符合

4.6K50

还在被数据的序列化折磨?是时候丢弃 Gson

认识一下 看名字就知道这是 Kotlin 官方的序列化框架了,它支持 JSON/CBOR/Protobuf,下面我们主要以 JSON 例介绍它的功能(因为后面那俩不是给人看的啊)。...它作为一套专门 Kotlin开发的序列化框架,自然要兼顾到 Kotlin 的类型的各种特性,你会发现用 Gson 来序列化 Kotlin 遇到的奇怪的问题在这里都没了。...Gson 做不到的事儿 看到这里 Gson 哥坐不住了,这事儿尼玛我也会啊,不就解析Json 串吗,有啥难的??...③属性代理 如果你在数据(不是 data class 但也被当数据结构用的也算)里面用到了属性代理,就像这样: @Serializable data class Data(val a: Int, @...不过这次的结果可能就不是一个简单的 null 了,而是: ? 用 Gson 解析之后,如果我们想要访问 d,直接抛出空指针。这是为什么呢?

2.2K10

数据增加nonNull字段反序列化的坑

数据增加字段,反序列化 Json 有惊喜?...,"age":18} 这样我们对这个字符串进行解析并得到 Person 这个实例,没有毛病。...柳暗花明,noArg 的妙用 我们再来理一下,我们的目标其实是要做到: company 字段定义 nonNull 类型 在反序列化 Json ,如果 Json 中没有这个字段,要赋值字符串,也就是要有个默认值...熟悉 Kotlin 数据的坑的朋友们都知道,NoArg 和 AllOpen 无论如何都是少不了的。...这个方案至少是可行的,从使用的角度来看,也可以达到我们的需求。 不过似乎也看上去比较重,因为引入了一个父。实际上,从代码设计的角度来看,数据通常也不需要父,这个意义上讲,这个方案是可用的。

90510

穿越到东汉末年的Jackson

它也可以用于JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。...东吴FastJson fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。...比如guava中定义的数据类型,比如kotlin语言Immutable的类型等,比如java8 引入的新日期时间类型和Optional都已经有支持的模块。...让我们MyBean实体的属性设置自定义顺序: 这是序列化的输出: image.png @JsonRootName 该 @JsonRootName注释,如果包裹被启用,以指定的包装中使用的根目录的名称...包装意味着不是User序列化为以下内容: 它将像这样包装: image.png image.png @JsonSerialize @JsonSerialize表示在编组实体 使用的自定义序列化程序

1.9K20

有意思,发现Kotlin一个神奇的bug!

2、bug复现 现实开发中,我们经常会有Json字符串反序列化为一个对象问题,这里,我们用Gson来写一段反序列代码,如下: fun fromJson(json: String, clazz:...当我们满怀信心的测试以上代码,问题出现了,List反序列化失败了,如下: List里面的对象竟不是User,而是LinkedTreeMap,怎么回事,这难道就是标题所说的Kotlin的bug...在收到的泛型不明确,便会自动json对象反序列化为LinkedTreeMap对象。...显然,要去看Json.kt的字节码文件,我们先来看看base module里的Json.class文件,如下: 注:以下字节码文件,方便查看,会删除一些注解信息 package com.example.base...1.3.x版本,我就发现了,到目前最新版本也一直存在,期间曾请教过Bennyhuo大神,后面规避了这个问题,就没放心上,近期将会把这个问题,提交给kotlin官方,望尽快修复。

90120

Android 序列化框架 Gson 原理分析,可以优化吗?

Gson[1] 是 Google 推出的 Java Json 解析库,具有接入成本低、使用便捷、功能扩展性良好等优点,想必大家都很熟悉了。...在解析数据,它们会将 Json 数据一次性解析 JsonElement 树型结构。...不过,如果需要用到完整数据结构(例如根据 type 字段按照不同类型解析 data),也可以手动解析树型结构。因此 TypeAdapter 这个 API 的优先级更高。...在 Gson 的反序列化中,首次反序列化一个类型的对象Gson 需要使用大量反射调用解析一个 TypeAdapter 适配器对象。随着 Model 的复杂程度增加,首次解析的耗时会不断膨胀。...[3] —— Norman Peitek 著 Javadoc · Gson[4] —— Gson 官方文档 Gson 源码解析和它的设计模式[5] —— 拉丁吴 著 还在被数据的序列化折磨?

2.2K50

快速学习-JSON

第12章 JSON 12.1 JSON 简介 AJAX一开始使用XML的数据格式,XML的数据格式非常简单清晰,容易编写,但是由于XML中包含了过多的标签,以及十分复杂的结构,解析起来也相对复杂,所以目前来讲...12.2 JSON通过6种数据类型来表示 字符串 例子:”字符串” 注意:不能使用单引号 数字: 例子:123.4 布尔值: 例子:true、false null值: 例子:null 5 )...首先解析JSON字符串我们需要导入第三方的工具,目前主流的解析JSON的工具大概有三种json-lib、jackson、gson。三种解析工具相比较json-lib的使用复杂,且效率较差。...而Jackson和gson解析效率较高。使用简单,这里我们以gson例讲解。 Gson是Google公司出品的解析JSON工具,使用简单,解析性能好。...Gson解析JSON的核心是Gson解析操作都是通过该类实例进行。

1.4K10

Gson:我爸是 Google

01、前世今生 我叫 Gson,是一款开源的 Java 库,主要用途序列化 Java 对象 JSON 字符串,或反序列化 JSON 字符串成 Java 对象。...Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的,而不是传统的 XML。...,你可以基本数据类型 int、字符串类型 String、包装器类型 Integer、int 数组等等作为参数,传递给 toJson() 方法,该方法将会返回一个 JSON 形式的字符串。...5)JSON 中缺少的字段将在反序列化后设置默认值,引用数据类型的默认值 null,数字类型的默认值 0,布尔值默认为 false。 接下来,来看一个序列化集合的例子。...使用 toJson() 序列化 Java 对象返回JSON 字符串中没有空格,很紧凑。

90320

Android避坑指南,GsonKotlin碰撞出一个不安全的操作

问题的来源 上周一个群有个小伙伴,遇到了一个Kotlin写的Bean,在做Gson字符串转化成具体的Bean对象,发生了一个不符合预期的问题。...我们传递了一个json字符串,但是没有包含keyname的值,并且注意: 在Person中name的类型是String,也就是说是不允许name=null的 那么上面的代码,我运行起来结果是什么呢?...报错,毕竟没有传name的值; 不报错,name 默认值""; 不报错,name=null; 感觉1最合理,也符合Kotlin的空安全检查。...返回null会走newDefaultImplementationConstructor,这个方法里面都是一些集合相关对象的逻辑,直接跳过。...只要把这个的classLoader成员变量设置null就可以了。

1.3K20

Kotlin 泛型详解

也正是因为这个原因,我们在使用 Gson 反序列化对象的时候除了制定泛型参数,还需要传入一个 class : public T fromJson(String json, Class classOfT...在 Kotlin 当中有一个关键字叫做 reified,还有一个叫做 inline,后者可以函数定义内联函数,前者可以内联函数的泛型参数当做真实类型使用,我们先来看例子: inline fun... Gson.fromJson(json: String): T{     return fromJson(json, T::class.java) } 这是一个 Gson 的扩展方法...super E 的用法,这表示元素类型 E 及其父,这个通常也叫作逆变。 2.2 Kotlin 的型变 型变包括协变、逆变、不变三种。 下面我们看看 Kotlin 是怎么支持这个特性的。...逆变的情形正好相反,即不可以泛型参数作为方法的返回值。

1.1K20

源码追踪 - Gson解析部分属性值null

本文链接:https://blog.csdn.net/luo4105/article/details/102896372 接口返回json数据,有些key的值是null,而断点调试返回对象是有数据的...原因是项目采用的gsonjson解析gson解析对象json字符串,对于对象中匿名内部类属性,会设Null值。 解决方法是不使用匿名内部类对象。 前端接收数据,实际对象是有值的。...赋值null的代码 com.google.gson.internal.bind.Excluder133行。...而匿名内部类对象getClass返回的对象是个随机命名,与定义的class不一样,gson于是会判空。...gson如何解析 打印代码执行stack,可以看到gson一层一层解析json逻辑是解析属性,如果属性没有对应解析器,就新建解析对象继续解析,不停递归。递归的顺序就在下面的堆栈中。

1.5K20

Gson 系列文章

反序列化嵌套对象 在平时的开发中,很多中情况是 API 接口返回 JSON 数据,我们解析成相应的对象。...,我们在使用 Gson 解析不再需要传递 TypeToken,直接传入即可。...处理空值 我们使用之前的 model UserSimple,不过name字段我们给赋值null,如下: UserSimple userObject = new UserSimple(null, "...Gson 内部使用的是 JsonReader ,看源码能发现里面有一个 lenient 的属性,默认是 false,也就是说默认值接受标准的 JSON 格式数据,如果数据有问题,抛出异常解析失败。...自定义反序列化 应用中很常见 Server 端返回数据并不是我们想要的结构,这种情况就需要我们自定义解析器,使用原始的 JSON 数据,转换成 Java 常见的数据结构或者自定义 model。

15.3K10
领券