如何使用import play.api.libs.json将任何JSON字符串转换为Map [Symbol,Any]?

时间:2014-06-30 11:37:55

标签: json scala playframework-2.3

我无法弄清楚是否有办法使用Map[Symbol,Any]库在play.api.libs.json中转换JSON片段(作为字符串),其中Any可能是Int },DoubleString或嵌套Map[Symbol,Any]

有人能给我一个暗示吗?

1 个答案:

答案 0 :(得分:3)

JsObject.fieldSet会为您提供Set[(String, JsValue)],您可以将其转换为Map[Symbol, Any]。您必须在JsValue的所有可能子类上进行模式匹配,并将每个子类转换为您想要的类型。

例如,像这样:

 Json.parse(text) match {

    case js: JsObject => 
      js.fieldSet.map { 
        case (key, value) => Symbol(key) -> transform(value) 
      }.toMap

    case x => throw new RuntimeException(s"Expected object json but got $text")
 }

 def transform(jsValue): Any = jsValue match {
    case JsNumber(value) => value.toDouble
    ...ect...
 }