【问题标题】:Can't parse json in Kotlin无法在 Kotlin 中解析 json
【发布时间】:2020-11-04 18:10:00
【问题描述】:

我有一个这样的 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: [, , , ]]

我尝试将结果设为JsonObject(或JsonObjectsJsonArray)并得到了这个

Unable to instantiate JsonObject with parameters []

唯一或多或少起作用的是List。结果变成这样的java对象列表:

[java.lang.Object@680362a, java.lang.Object@3569edd5, java.lang.Object@1f651cd8, java.lang.Object@7d0332e1]

但我不知道如何处理它们。
所以我的问题是我该怎么办?我如何获得可以使用的结果?

【问题讨论】:

    标签: json kotlin klaxon


    【解决方案1】:

    试试这个课程

    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
    )
    

    【讨论】:

    • 太好了,它有效,谢谢!现在我感到内疚,有人为我做了所有的解析......不过,我明白了,我想下次我会处理的。非常感谢。
    • @AlexanderDay 你也可以从这里解析它app.quicktype.io
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2018-07-23
    • 2017-06-15
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多