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

如何将LinkedHashMap数据填充到嵌套Kotlin数据类中

实现思路

嵌套数据类的填充逻辑非常直接,从最内层数据结构开始逐层向外构造即可:先构造最内层的DetailsData,再将其包装为中间层SubjectData,最后将所有角色对应的SubjectData汇总为最外层的SubjectSummary。

具体实现步骤

1. 编写单层转换逻辑

先实现Subject类向内层数据类的转换方法:

// Subject转最内层DetailsData
fun Subject.toDetailsData(): DetailsData {
    return DetailsData(
        // 此处可根据业务逻辑赋值,示例为Subject中布尔值为true时填充对应内容,否则返回空串
        name = if (name == true) "对应姓名字段值" else "",
        lastName = if (lastname == true) "对应姓氏字段值" else "",
        location = if (location == true) "对应位置字段值" else ""
        // 补全其他字段的赋值逻辑
    )
}

// 包装为SubjectData
fun Subject.toSubjectData(): SubjectData {
    return SubjectData(details = this.toDetailsData())
}

2. 构造最终的SubjectSummary

从你的LinkedHashMap数据源中取值,拼装外层对象:

// 你的原始数据源
val finalResult: LinkedHashMap<String, Subject> = // 你已有的final_result对象

val subjectSummary = SubjectSummary(
    admin = finalResult["admin"]?.toSubjectData() ?: throw IllegalArgumentException("缺失admin对应数据"),
    customer = finalResult["customer"]?.toSubjectData() ?: throw IllegalArgumentException("缺失customer对应数据")
    // 补全SubjectSummary中其他角色字段的赋值
)

3. 序列化得到目标JSON

直接将构造完成的subjectSummary对象用你常用的序列化工具(kotlinx.serialization/Jackson/Gson等)序列化,即可得到你需要的JSON格式。

补充说明

  • 如果Subject类中的布尔字段是用于标记对应字段是否需要展示,你只需要调整toDetailsData方法中的赋值逻辑,替换为实际业务对应的字符串取值逻辑即可。
  • 如果后续角色类型是动态增加的,不需要硬编码SubjectSummary的固定字段,直接使用Map<String, SubjectData>结构序列化也可以得到完全相同的JSON结构,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:12:01