You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ktor/Kotlinx处理合法JSON时抛出JsonDecodingException问题求助

错误根因

反序列化器解析到JSON偏移量6的位置(即d数组第一个元素的起始{符号)时,预期读取字符串的起始符号",与你定义的List<D>类型规则不匹配,核心原因为D类的序列化配置未生效,导致反序列化器将D类型识别为了字符串类型。

修复方案

  1. 检查序列化编译插件配置
    仅引入kotlinx-serialization依赖无法生效,必须在构建脚本中添加对应编译插件:
    Gradle Kotlin DSL配置示例:
plugins {
    kotlin("jvm") version "和你项目一致的Kotlin版本"
    kotlin("plugin.serialization") version "和你项目一致的Kotlin版本"
}

Maven配置示例:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <executions>
        <execution>
            <id>compile</id>
            <goals>
                <goal>compile</goal>
            </goals>
            <configuration>
                <compilerPlugins>
                    <plugin>kotlinx-serialization</plugin>
                </compilerPlugins>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-maven-serialization</artifactId>
            <version>${kotlin.version}</version>
        </dependency>
    </dependencies>
</plugin>
  1. 检查注解导入正确性
    确认D和IMDBInfo类顶部导入的是kotlinx.serialization.Serializable,不要误导入java.io.Serializable,后者不会被kotlinx-serialization识别。
  2. 检查D类定义位置
    如果D类是StreamingAvailability的内部类(带inner关键字),需要将D类移到StreamingAvailability外部定义,或者去掉inner关键字改为普通嵌套类。带inner的内部类会持有外部类引用,序列化器无法生成对应序列化规则。
  3. 冗余配置清理
    你当前Json配置中的allowStructuredMapKeys属于冗余配置,你的场景不需要结构化Map键支持,可以直接删除。

验证方法

可以先临时将IMDBInfo的d字段类型改为List<JsonElement>,如果运行后可以正常打印内容,即可确认是D类的序列化配置问题,调整配置后再改回List<D>即可。

内容的提问来源于stack exchange,提问作者Jeremy T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:06:05