解析函数中的嵌套地图(加特林)

时间:2019-02-25 18:27:04

标签: scala

我有一张这样的地图:

{
    "user": 
    {
        "name": "Jon Doe",
        "age": "6",
        "birthdate": {
            "timestamp": 1456424096
        },
        "gender": "M"    
    }
}

和类似的功能

def setUser(user: Map[String, Any]): Map[String, Any]={
    var usr = Map("name"-> user.get("name").getOrElse(""),
             "gender" -> user.get("gender").getOrElse(""),
             "age" -> user.get("age").getOrElse(""),
             "birthday" -> patient.get("birthdate")) 

      return usr
}

我想在“生日”字段中映射“ timestamp”(1456424096)的值。

现在我有这个:一些%28%7Btimestamp%3D1456424096%7D%29

我对此很陌生。有人可以帮助我获得“时间戳”的价值吗?

1 个答案:

答案 0 :(得分:0)

假设您只是想摆脱嵌套的生日(而不是嵌套的用户),它看起来可能像这样:

val oldData: Map[String, Any] = Map(
  "user" -> Map(
    "name" -> "John Doe",
    "age" -> 6,
    "birthday" -> Map("timestamp" -> 1234454666),
    "gender" -> "M"
  )
)

def flattenBirthday(userMap: Map[String, Any]) = Map(
  "user" -> (userMap("user").asInstanceOf[Map[String, Any]] + (
    "birthday" -> userMap("user").asInstanceOf[Map[String, Any]]("birthday").asInstanceOf[Map[String, Any]]("timestamp")
  ))
)

val newData = flattenBirthday(oldData) 

但是,通常来说,处理嵌套的不可变地图会很丑陋。如果您从JSON中提取数据(如您的示例中所示),则最好使用一些库将该数据反序列化为case类对象。