我有3个json's,从Json 1对象中,我需要从“设备”映射中获得“设备名称”的值,如果“设备”映射不在那里,那么我需要从“接口”映射中获得“设备名称”的值。
从Json 2对象中,我需要从“接口”映射中获得“设备名称”的值,从Json 3对象中,我需要从“段”映射中获得“段-设备名”的值。
我可能从前端获得这3条json中的任何一条,如何在Scala中以优雅的方式实现这一点,方法是将json转换为map并使用最少的行数,例如使用Scala映射的find()或filter()函数
我使用org.json4s.jackson.JsonMethods.parse(request.getContent).extract[Map[String, Any]]将json转换为map,因为innermap可能再次映射,所以我使用任何Json 1:
{
"device": {
"device-name": "scala",
"payment" : {
"test": "x"
}
},
"interface": {
"device-name": "java"
}
}Json 2:
{
"interface": {
"device-name": "java"
}
}Json 3:
{
"segment": {
"segment-device-name": "java"
}
}发布于 2018-08-10 18:45:27
如果你像Map[String, Map[String, String]]一样解析,那么你可以,对于地图m.
val keys = List(
("device", "device-name"),
("interface", "device-name"),
("segment", "segment-device-name")
)
val ans = for {
(ko, ki) <- keys
v <- m.get(ko) // get inner map if exists, else go to next k, v pair
} yield v(ki)
ans(0) // 0 index ensures we get "device" if exists before "interface"这将使地图和flatMap成为.
val ans = keys.flatMap(case (ko, ki) => m.get(ko).map(v => v(ki)))未测试
https://stackoverflow.com/questions/51791926
复制相似问题