首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ktor动态键序列化和json预处理

ktor动态键序列化和json预处理
EN

Stack Overflow用户
提问于 2022-04-05 16:15:20
回答 1查看 161关注 0票数 1

在反序列化过程之前,Ktor中是否有更改json的内容?在下面的示例中,有一个带有动态键的json,其中我需要删除“令牌”键,因为它是字符串类型,而不是对象类型作为其他键。当我修改代码时,我会得到以下错误:

代码语言:javascript
复制
Exception in thread "main" kotlinx.serialization.json.internal.JsonDecodingException: Expected class kotlinx.serialization.json.JsonObject as the serialized body of shell.remoting.Market, but had class kotlinx.serialization.json.JsonLiteral

我不确定是否还有更好的方法。如有任何建议,将不胜感激。

代码语言:javascript
复制
object MarketMapSerializer :
    JsonTransformingSerializer<Map<String, Market>>(MapSerializer(String.serializer(), Market.serializer())) {
    override fun transformSerialize(element: JsonElement): JsonElement =
        JsonObject(element.jsonObject.filterNot { (k, _) ->
            k == "token"
        })
}

@Serializable
data class Market(
    val stations: List<Station>,
)

@Serializable
data class Station(
    @JsonNames("iata_code")
    val iataCode: String,
    val destinations: List<String>,
)


fun main() {
    val jsonString = """
        {
            "Republica Dominicana": {
                "stations": [
                    {
                        "iata_code": "PUJ",
                        "destinations": [
                            "ADZ",
                            "BAQ",
                            "VVC"
                        ]
                    }
                ]
            },
            "Brasil": {
                "stations": [
                    {
                        "iata_code": "AJO",
                        "destinations": [
                            "ADZ",
                            "BAQ",
                            "VVC"
                        ]
                    }
                ]
            },
            "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkb3RSRVogQVBJIiwianRpIjoiYTVhZDM4NmYtOGViNy0yOWQ5LWZkMGYtM2Q3MzQwZmRhOGI2IiwiaXNzIjoiZG90UkVaIEFQSSJ9.V2YfXCt9r7Tzae9SYSoj-qIyxjRc9YoE2XPoIQQNI9U"
        }
    """.trimIndent()
    println(
        Json.decodeFromString(
            MarketMapSerializer,
            jsonString
        )
    )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 11:31:12

只需将transformSerialize替换为transformDeserialize,因为您正在进行反序列化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71755179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档