在 Kotlin 中解析 JSON
操作和解析 JSON 是許多 Kotlin 應用程式中的一項關鍵任務。要有效處理 JSON 字串,必須了解 Kotlin 生態系中可用的適當技術。
原生 JSON 操作
Kotlin 的原生 JSON 處理功能是一種極簡方法,消除了對外部依賴的需要。考慮以下將JSON 字串解析為物件的解決方案:
import org.json.JSONObject val jsonString = "{ \"name\": \"John Doe\", \"age\": 30 }" val json = JSONObject(jsonString) val name = json.getString("name") val age = json.getInt("age")
KotlinX Serialization
KotlinX Serialization 是提供高階序列化的綜合JSON 解析庫與綜合分析庫反序列化能力。要使用它:
將以下依賴項加入項目的 build.gradle 中:
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.0"
使用 @Serialized定義資料類別註解:
@Serializable data class Person(val name: String, val age: Int)
使用Json 物件解析JSON 字串:
val jsonString = "{ \"name\": \"Jane Doe\", \"age\": 35 }" val person = Json.decodeFromString(Person.serializer(), jsonString)
尋址物件
Jackson 的StdDeserializer允許反序列化具有嵌套屬性的對象,但在另一個反序列化器中存取它可能具有挑戰性。 KotlinX Serialization 透過其自訂反序列化機制提供了解決方案。以下是一個範例:import kotlinx.serialization.json.JsonObject import kotlinx.serialization.json.JsonTreeParser import kotlinx.serialization.KSerializer class NestedObjectDeserializer : KSerializer<MyObject> { override fun serialize(output: Encoder, value: MyObject) = error("not implemented") override fun deserialize(input: Decoder): MyObject { val parser = JsonTreeParser(input) val jsonObject = parser.parse(JsonObject::class) val key = jsonObject["key"] as JsonObject return MyObject(key["innerValue"] as JsonPrimitive) } }
結論
無論您喜歡原生JSON 處理還是KotlinX 序列化,這些解決方案都提供了在Kotlin 中解析JSON 字符串的有效方法。原生 JSON 操作是一個更簡單的選項,而 KotlinX 序列化為複雜的序列化和反序列化任務提供了進階功能。以上是如何在 Kotlin 中高效解析 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!