Gson 解析 json 的一些记录

384 阅读1分钟

并非复杂问题,只是做一个记录。

问题缘由

检查一个老功能的时候,服务端发现的一个问题,一个时间戳,服务端不一定返回,问移动端怎么接收处理的。检查移动端为 Gson 库和 kotlin data class 进行的接收。服务端如果不返回此值,移动端默认为0。

Java 基本数据类型和封装类型的 json 解析区别

答案如下:
Gson 解析后,如果 json 数据中,没有对应的值。
Java 代码。int 类型默认为 0Integer 类型默认为 null
Kotlin 代码,都是 IntInt 类型默认为 0Int? 类型默认为 null

代码如下: 待解析内容

{
    "username": "Android"
}

解析方式为使用 Gson 的基础方式。不增加类型适配之类的功能。

new Gson().fromJson("", xx.class);

java 类 1

public class User {
    public String username;
    public int age;
}

结果:username->Android, age->0

java 类 2

public class User {
    public String username;
    public Integer age;
}

结果:username->Android, age->null

kotlin data class 1

data class User(val username:String,val age:Int)

结果:username->Android, age->0

kotlin data class 2

data class User(val username:String,val age:Int?)

结果:username->Android, age->null

什么时候有用?

一些用基础类型值的地方,并且需要判断是否有此值的情况,就不能用有默认值的方法。