Gson库是一个由谷歌开发的Java库,它允许你将Java对象序列化和反序列化为JSON表示。
该库也可以在Kotlin中使用,将Kotlinclass
和data class
实例转换为其JSON表示。
首先,你需要将Gson库作为一个依赖项添加到你的项目中。如果你正在开发一个Android应用程序,你可以在你的app/build.gradle
文件中添加该依赖项:
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
// ...
implementation 'com.google.code.gson:gson:2.8.9'
}
或者如果你用Maven开发Kotlin应用,可以在你的pom.xml
文件中添加以下内容<dependencies>
标签:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
一旦你为你的项目同步了依赖关系,Gson库应该就可以供你使用了。
用Gson将Kotlin类转换为JSON格式
要将一个Kotlinclass
实例转换为其JSON实例,你需要调用Gson().toJson()
方法,并将类实例作为其参数传递。
假设你有一个User
数据类,定义如下:
data class User(
val firstName: String,
val lastName: String
)
你可以创建一个User
数据类实例的JSON表示,如下所示:
val myUser = User("Nathan", "Sebhastian")
val jsonString = Gson().toJson(myUser)
println(jsonString)
jsonString
的变量值将如下:
{"firstName":"Nathan","lastName":"Sebhastian"}
Kotlinclass
和data class
实例都可以用同样的方式进行序列化。
将JSON转换成Kotlin类格式
Gson也可以通过调用fromJson()
方法将JSON字符串转换回Kotlin类实例。
下面的例子将userJson
字符串,并将其转换为Kotlin对象:
val userJson = """
{
"firstName": "Arya",
"lastName": "Stark"
}"""
val myUser = Gson().fromJson(userJson, User::class.java)
println(myUser.firstName) // Arya
println(myUser.lastName) // Stark
fromJson()
方法接受两个参数:
- 第一个是要转换为对象的JSON字符串
- 第二个是作为对象蓝图的类。
这就是你如何使用Gson库对JSON字符串进行反序列化。
为Kotlin类添加自定义JSON键
默认情况下,Gson将使用类的字段名作为你的JSON键。
你可以使用@SerializedName
注解为你的每个字段名定义自定义JSON键,如下所示:
data class User(
@SerializedName("first_name")
val firstName: String,
@SerializedName("last_name")
val lastName: String
)
当你调用toJson()
方法时,JSON键将使用注释,如下图所示:
val myUser = User("Nathan", "Sebhastian")
val jsonString = Gson().toJson(myUser)
println(jsonString)
// {"first_name":"Nathan","last_name":"Sebhastian"}
当你调用fromJson()
方法时也是如此。
这就是你如何在Kotlin类实例中使用Gson库。
当你的Kotlinclass
的唯一目的是为JSON值提供一个蓝图时,建议创建一个data class
,而不是一个普通的class
。
在这里了解更多关于Kotlin数据类的信息。