我从一个服务接收到一个相当深的JSON对象字符串,我必须解析为JSON对象,然后将其映射到类。
如何将JSON字符串转换为Kotlin对象?
在映射到各自的类之后,我使用了来自Jackson的StdDeserializer。当对象的属性也必须被反序列化为类时,问题就出现了。我无法在另一个反序列化器中获得对象映射器,至少我不知道如何获得。
最好是,在本地,我试图减少我需要的依赖项的数量,所以如果答案只是JSON操作和解析它就足够了。
我从一个服务接收到一个相当深的JSON对象字符串,我必须解析为JSON对象,然后将其映射到类。
如何将JSON字符串转换为Kotlin对象?
在映射到各自的类之后,我使用了来自Jackson的StdDeserializer。当对象的属性也必须被反序列化为类时,问题就出现了。我无法在另一个反序列化器中获得对象映射器,至少我不知道如何获得。
最好是,在本地,我试图减少我需要的依赖项的数量,所以如果答案只是JSON操作和解析它就足够了。
当前回答
似乎Kotlin没有任何内置方法,因为在许多情况下,它只是从Java中导入并实现了一些工具。在尝试了许多包之后,最终这个包运行正常。这个fastjson来自阿里巴巴,非常容易使用。内部构建gradle依赖:
implementation 'com.alibaba:fastjson:1.1.67.android'
在你的Kotlin代码中:
import com.alibaba.fastjson.JSON
var jsonDecodedMap: Map<String, String> =
JSON.parse(yourStringValueHere) as Map<String, String>;
其他回答
这使用kotlinx。像以利沙的回答。与此同时,该项目已经过了1.0版本,因此API已经发生了变化。注意,例如JSON。parse被重命名为Json.decodeFromString。此外,从Kotlin 1.4.0开始,它以不同的方式导入gradle:
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.0"
}
apply plugin: 'kotlinx-serialization'
使用示例:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
@Serializable
data class Point(val x: Int, val y: Int)
val pt = Json.decodeFromString<Point>("""{"y": 1, "x": 2}""")
val str = Json.encodeToString(pt) // type can be inferred!
val ilist = Json.decodeFromString<List<Int>>("[-1, -2]")
val ptlist = Json.decodeFromString<List<Point>>(
"""[{"x": 3, "y": 4}, {"x": 5, "y": 6}]"""
)
你可以对可空字段和可选字段使用可空类型(T?):
@Serializable
data class Point2(val x: Int, val y: Int? = null)
val nlist = Json.decodeFromString<List<Point2>>(
"""[{"x": 7}, {"x": 8, "y": null}, {"x": 9, "y": 0}]"""
)
Kotlin的数据类是一个主要保存数据的类,并具有自动定义的成员. tostring()和其他方法(例如解构声明)。
芬兰湾的科特林序列化
Kotlin特定的库由JetBrains支持的所有平台- Android, JVM, JavaScript,本机。
https://github.com/Kotlin/kotlinx.serialization
Moshi
Moshi是一个JSON库,适用于Android和Java。
https://github.com/square/moshi
杰克逊
https://github.com/FasterXML/jackson
Gson
最受欢迎但几乎被弃用。
https://github.com/google/gson
JSON到Java
http://www.jsonschema2pojo.org/
JSON到Kotlin
智能插件 – https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass-
解析JSON字符串到Kotlin对象
正如其他人推荐的那样,Gson库是最简单的方法!
如果文件在资产文件夹中,您可以这样做,首先添加
dependencies {
implementation 'com.google.code.gson:gson:2.9.0'
}
然后从资产中获取一个文件:
jsonString = context.assets.open(fileName).bufferedReader().use { it.readText() }
然后使用Gson:
val gson = Gson()
val listPersonType = object : TypeToken<List<Person>>() {}.type
var persons: List<Person> = gson.fromJson(jsonFileString, listPersonType)
persons.forEachIndexed { idx, person -> Log.i("data", "> Item $idx:\n$person") }
Person是一个模型/数据类,像这样
data class Person(val name: String, val age: Int, val messages: List) {
}
使用http://www.json2kotlin.com/将JSON转换为Kotlin
你也可以使用Android Studio插件。> Settings文件,在左侧树中选择Plugins,点击“Browse repositories…”,搜索“JsonToKotlinClass”,选中它,点击绿色按钮“Install”。
在AS重启后,您可以使用它。你可以用File > New > JSON ToKotlin class (jsontokotlclasass)创建一个类。另一种方法是按Alt + K。
然后您将看到一个粘贴JSON的对话框。
2018年,我不得不添加包com.my。类开头的Package_name。
您可以使用这个库https://github.com/cbeust/klaxon
Klaxon是一个轻量级库,用于在Kotlin中解析JSON。