json - 无法在 Kotlin 中解析 json
问题描述
我有一个这样的json:
{"ok":true,"result":[{"update_id":853803195,
"message":{"message_id":313,"from":{"id":104906563,"is_bot":false,"first_name":"AL","username":"alzvaracc","language_code":"en"},"chat":{"id":104906563,"first_name":"AL","username":"alzvaracc","type":"private"},"date":1594723984,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":853803196,
"message":{"message_id":314,"from":{"id":104906563,"is_bot":false,"first_name":"AL","username":"alzvaracc","language_code":"en"},"chat":{"id":104906563,"first_name":"AL","username":"alzvaracc","type":"private"},"date":1594723986,"text":"e"}},{"update_id":853803197,
"message":{"message_id":325,"from":{"id":104906563,"is_bot":false,"first_name":"AL","username":"alzvaracc","language_code":"en"},"chat":{"id":104906563,"first_name":"AL","username":"alzvaracc","type":"private"},"date":1594734252,"text":"\ud83d\ude06"}},{"update_id":853803198,
"message":{"message_id":328,"from":{"id":104906563,"is_bot":false,"first_name":"AL","username":"alzvaracc","language_code":"en"},"chat":{"id":104906563,"first_name":"AL","username":"alzvaracc","type":"private"},"date":1594736358,"text":"5"}}]}
我正在使用klaxon库。就像在第一个示例中一样,我创建了一个类:
class Response(val ok: Boolean, val result: String)
我试图将第二个参数保存为字符串,以便稍后也可以解析它。但我得到一个这样的例外:
Unable to instantiate Response with parameters [ok: true, result: [, , , ]]
我尝试将结果设为 a JsonObject
(或 a JsonArray
of JsonObjects
)并得到了这个
Unable to instantiate JsonObject with parameters []
唯一或多或少起作用的是 List<Any>。结果变成这样的java对象列表:
[java.lang.Object@680362a, java.lang.Object@3569edd5, java.lang.Object@1f651cd8, java.lang.Object@7d0332e1]
但我不知道如何处理它们。
所以我的问题是我该怎么办?我如何获得可以使用的结果?
解决方案
试试这门课
import com.beust.klaxon.*
private val klaxon = Klaxon()
data class User (
val ok: Boolean,
val result: List<Result>
) {
public fun toJson() = klaxon.toJsonString(this)
companion object {
public fun fromJson(json: String) = klaxon.parse<User>(json)
}
}
data class Result (
@Json(name = "update_id")
val updateID: Long,
val message: Message
)
data class Message (
@Json(name = "message_id")
val messageID: Long,
val from: From,
val chat: Chat,
val date: Long,
val text: String,
val entities: List<Entity>? = null
)
data class Chat (
val id: Long,
@Json(name = "first_name")
val firstName: String,
val username: String,
val type: String
)
data class Entity (
val offset: Long,
val length: Long,
val type: String
)
data class From (
val id: Long,
@Json(name = "is_bot")
val isBot: Boolean,
@Json(name = "first_name")
val firstName: String,
val username: String,
@Json(name = "language_code")
val languageCode: String
)
推荐阅读
- excel - 我正在使用 VBA 代码将所有工作表更改存储到一个数组中,并在关闭之前使用所有“目标”发送电子邮件通知
- terraform - 如何使用 for 循环在多个区域创建 AWS 资源
- openlayers - 如何使用 openlayers 在同一层中具有两个或多个功能?
- hyperledger-iroha - 如何将资产与账户绑定
- python - 如何查找列表中每个长度的连续值序列的数量?
- mybatis - 使用对象的属性,该属性是映射器 XML 中的字符串数组
- javascript - 如何在 Javascript 中动态声明选择器?
- c# - 如何查询列表并返回 ID = 数组中的任何值的值
- node.js - 在 NodeJS 中,如何从主域访问 cookie?
- python - 从展平的 POST 请求创建嵌套对象(1-1 关系)