如何将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
相关产品推荐
相关产品推荐

