如何使用MapNeat重命名JSON列表内部对象的指定字段
MapNeat JSON结构转换解决方案
错误原因
你原来的写法不生效是因为MapNeat不支持直接通过"detil[*].nama" *= "detail[*].name"这种跨数组的通配符属性映射逻辑,无法自动创建对应的数组层级结构。
正确实现代码
有两种常用的实现方式:
方式1:显式遍历数组处理
fun test(jsonRequest: String, setup: String): MapNeat { val transform = json(MapNeatSource.fromJson(jsonRequest)) { // 遍历原detail数组,逐个转换内部字段 "detil" *= from("detail").map { itemSource -> json(itemSource) { "nama" *= "name" } } } return transform }
方式2:先复制数组再批量重命名键
如果使用较新版本的MapNeat,可以先复制数组再批量修改内部键名,写法更简洁:
fun test(jsonRequest: String, setup: String): MapNeat { val transform = json(MapNeatSource.fromJson(jsonRequest)) { // 先把原detail数组完整复制到目标detil字段 "detil" *= "detail" // 批量把detil数组下所有元素的name键重命名为nama "detil[*].name" *= fromSelf().renameKey("nama") } return transform }
两种写法都可以实现你需要的数组字段重命名转换效果,输出的JSON结构和你给出的目标结构完全一致。
内容的提问来源于stack exchange,提问作者Muhammad Huda
相关产品推荐
相关产品推荐

