如何使用mapneat重命名字段,它位于像这样的列表对象中
{
"detail" : [
{
"name" : "huda"
},
{
"name" : "syahnaz"
}
]
}
到
{
"detil" : [
{
"nama" : "huda"
},
{
"nama" : "syahnaz"
}
]
}
我试着像这样变换它,但是没有用
fun test(jsonRequest: String, setup: String): MapNeat {
val transform = json(MapNeatSource.fromJson(jsonRequest)){
"detil[*].nama"*="detail[*].name"
}
return transform;
}
MapNeat作者最后的回答
答案在这里
val source = "
{
"detail" : [
{
"name" : "huda"
},
{
"name" : "syahnaz"
}
]
}
"
fun main() {
var value = json(fromJson(source)) {
"detail" *= "$.detail"
val detail = getObjectMap().get("detail") as List<Object>
"detil" /= detail.map {
json(fromObject(it)) {
"nama" *= "$.name"
}
}.toList()
- "detail"
}.getPrettyString()
print(value)
}
输出{
"detil" : [ {
"nama" : "huda"
}, {
"nama" : "syahnaz"
} ]
}
主要思想是:
- 选择"detail"从源头到目标:"细节";* =".detail"美元;
- 在这行之后,它可以在getObjectMap()中访问,它将目标的内部表示保持为Map<String,Object>。您将结果强制转换为List '(因为它是一个数组)。 然后你遍历细节,并为每个元素应用一个新的转换。
- 你删除了"detail"因为你不再需要它了。
您可以在Mapneat github讨论中看到原始链接
Mapneat讨论