地图列表到案例类scala

时间:2017-05-15 11:40:21

标签: scala playframework

我有路由器相关数据,格式如下: -

List(Map(routerId -> testR1, 
        config -> 
        List(
            Map(pin -> X12, color -> YELLOW), 
            Map(pin -> M20, color -> BLACK)
            )
        ),
    Map(routerId -> testR3,
        config -> 
        List(
            Map(pin -> M12, color -> YELLOW), 
            Map(pin -> X20, color -> BLACK),
            Map(pin -> M11, color -> RED)
            )
        )   

    )

我有一个路由器案例类

case class Router(routerId: String, modelInfo: List[Map[String,String]])

我正在尝试创建一个路由器列表,我尝试使用asInstanceOf进行转换,如下所示:

val data =  request.get("data").get.asInstanceOf[List[Map[String, List[Map[String, String]]]]]

但是,如果可能的话,我宁愿不施展它。有更好的方法吗?

编辑: 该请求实际上是json请求,如下所示:

{
    "data": [
            {
                "routerId": "testR1",
                "config": [
                    {
                        "pin": "X12",
                        "color": "Red"
                    },
                    {
                        "pin": "M15",
                        "color": "Yellow"
                    },
                    {
                        "pin": "X20",
                        "color": "Yellow"
                    }
                ]
            },
            {
                "routerId": "testR2",
                "config": [
                    {
                        "pin": "X20",
                        "color": "Black"
                    },
                    {
                        "pin": "M11",
                        "color": "Yellow"
                    }
                ]
            }
        ]
    }

我正在使用播放2,它实际上将其转换为List [Map ...]格式。

P.S。 - 我是斯卡拉的新手。

1 个答案:

答案 0 :(得分:1)

你可以像这样使用play-json ..

import play.api.libs.json._

implicit val reads = Json.reads[Router]

val jsResult: JsResult[Router] = Json.fromJson[Router](jsonString)

println(jsResult.get)

了解更多信息

https://www.playframework.com/documentation/2.5.x/ScalaJson https://www.playframework.com/documentation/2.5.x/ScalaJsonAutomated