Tool Kumar 工具
JSON 转 Kotlin 数据类
把示例 JSON 转换成适用于 kotlinx.serialization 的数据类。嵌套对象各自生成独立的类,数组变成 List,重命名的字段通过 @SerialName 保留传输时的原始键名。
如何使用这个工具
- 粘贴一份有代表性的响应,其中应包含字段存在差异的记录。
- 检查生成的输出,必要时修改根名称。
- 复制或下载代码,然后对照你的 API 契约检查类型。
示例演示
以下输出来自内置转换器。两个数组元素的 price 值用于推断浮点型字段;note 值分别为 null 和字符串,因此推断为可空字段。
输入
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}输出
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Root(
@SerialName("user-id") val userId: Long,
val profile: Profile,
val items: List<Item>,
)
@Serializable
data class Profile(
val city: String,
@SerialName("created_at") val createdAt: String,
)
@Serializable
data class Item(
val price: Double,
val note: String? = null,
)
解码 Android API 响应
在应用中启用 Kotlin 序列化编译器插件,并添加 kotlinx.serialization 的 JSON 依赖。用生成的 Root 类型调用 Json.decodeFromString。
ignoreUnknownKeys 让服务端新增的字段不会导致解析失败。只有在你的 API 策略允许未知字段时,才设置这个选项。
import kotlinx.serialization.json.Json
val json = Json { ignoreUnknownKeys = true }
val model = json.decodeFromString<Root>(responseBody)选项与特殊情况
- 生成器会为每个数据类加上 @Serializable,并导入 kotlinx.serialization 注解。它不会生成 Moshi 的 @Json 或 Gson 的 @SerializedName。
- 整数使用 Long,小数使用 Double,只出现过 null 或类型混合的值使用 JsonElement。可空字段默认值为 null。
- 超出有符号 64 位范围的整数会变成 Double,可能丢失精度。需要精确的标识符时,请使用字符串或自定义序列化器。
- 日期字符串保持为 String。仅凭一份示例,无法判断某个字段是否在每个 API 响应中都必然存在。
默认保护隐私
你的文档只保留在这个浏览器中。Tool Kumar 在你的设备上解析、转换并生成下载文件,无需账号,也没有上传步骤。
JSON 转 Kotlin 数据类:常见问题
- 使用哪个 Kotlin 序列化库?
- kotlinx.serialization。输出使用 @Serializable,当 Kotlin 属性名与 JSON 键名不同时会加上 @SerialName。
- 可以配合 Moshi 使用吗?
- 字段类型可以作为编写模型的起点,但注解适用于 kotlinx.serialization。如果你的 Android 应用使用 Moshi,请替换这些注解并配置 Moshi 代码生成。
- 缺失字段和 null 字段如何处理?
- 在部分数组记录中缺失或出现过 null 的字段会变成可空类型,默认值为 null。必填的非空字段没有默认值。
- 能为 Android 生成 Kotlin DTO 吗?
- 能。它生成的数据类适合用作 DTO。请在项目中配置 Kotlin 序列化编译器插件和 JSON 运行时库。