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

如何使用Klaxon仅解析JSON中的指定部分?

解析JSON中指定字段到Kotlin对象的简便方案

嘿,这事儿好办!Kotlin里常用的几个JSON解析库都能轻松实现只提取data字段的需求,我给你列几个最简便的方案,选你顺手的用就行~

使用Gson实现

Gson是Google的老牌JSON库,用法非常直观。

首先确保你的User数据类定义正确(要加val让属性可访问):

data class User(val name: String, val age: Int)

最简便的方式是创建一个临时包装类,只定义我们需要的data字段,Gson会自动忽略JSON里的其他字段:

// 临时类,仅包含需要解析的字段
data class UserResponse(val data: List<User>)

// 核心解析代码
val jsonString = """{ "data": [ { "name": "aaa", "age": 11 }, { "name": "bbb", "age": 22 } ], "otherdata" : "don't need" }"""
val gson = Gson()
val userResponse = gson.fromJson(jsonString, UserResponse::class.java)
val userList: List<User> = userResponse.data

如果不想创建临时类,也可以直接操作JSON对象提取数组:

val jsonObject = JsonParser.parseString(jsonString).asJsonObject
val dataJsonArray = jsonObject.getAsJsonArray("data")
val userList = gson.fromJson(dataJsonArray, object : TypeToken<List<User>>() {}.type)

使用Moshi实现

Moshi是Square推出的库,对Kotlin的空安全、数据类支持非常友好。

先定义数据类,同样用临时包装类方案:

data class User(val name: String, val age: Int)
data class UserResponse(val data: List<User>)

解析代码如下(记得先添加Moshi的Kotlin依赖):

// Gradle依赖配置
// implementation("com.squareup.moshi:moshi-kotlin:1.14.0")

val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
val adapter = moshi.adapter(UserResponse::class.java)
// 注意处理空值,避免JSON解析失败时出现NPE
val userList: List<User> = adapter.fromJson(jsonString)?.data ?: emptyList()

使用Jackson实现

Jackson是功能强大的JSON库,配合Kotlin模块可以完美适配Kotlin特性。

同样先定义数据类,建议给包装类加上@JsonIgnoreProperties注解(确保忽略未知字段,避免解析报错):

data class User(val name: String, val age: Int)

@JsonIgnoreProperties(ignoreUnknown = true)
data class UserResponse(val data: List<User>)

解析代码:

// Gradle依赖配置
// implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2")

val objectMapper = jacksonObjectMapper()
val userResponse = objectMapper.readValue<UserResponse>(jsonString)
val userList: List<User> = userResponse.data

小总结

最推荐的是临时包装类方案,代码简洁易读,各个库都能完美适配,而且不需要手动处理JSON结构。这些库默认都会忽略JSON中未定义的字段(Jackson需要加个注解或者配置),完全符合你只提取data部分的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:28