Scala模板不能json

时间:2016-04-25 19:38:17

标签: json scala playframework

我正在使用带有playframework的scala模板。我想从json读取一个值,但我得到了JSError

  

JsError(列表((/ “活性\” 陆上 “\” 桑尼维尔”,列表(ValidationError(error.path.missing,WrappedArray())))))

这是我的JsonString

rfrdetails = {
    "active": {
        "onshore": {
            "sunnyvale": 10,
            "cupertino": 20,
            "sfo": 8
        }
    }
}

我的template.scala.html

@(rfrdetails : String)

@import play.api.libs.json._
@rfrjsonex(label:String) = @{
    println(label)
    var json: JsValue = Json.parse(rfrdetails)
    ((__ \ label).read[Int]).reads(json)
}

调用上述可重复使用的代码,如下所示。

<tr>
<td>@rfrjsonex("\"active" + "\\" + "\"onshore\"" + "\\" + "\"sunnyvale\"")</td>
</tr>

当我在代码块

中提供json路径时,可重用代码工作正常
@rfrjsonex(label:String) = @{
    println(label)
    var json: JsValue = Json.parse(rfrdetails)
    ((__ \ "active"\"onshore"\"sunnyvale").read[Int]).reads(json)
}

我哪里出错了。不确定它是否非常愚蠢。从错误中,我可以在JsError中看到“active”之前有“/”,不知道它是如何附加的。 JsError(列表((/ “活性\” 陆上 “\” 桑尼维尔“

任何帮助将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:2)

\符号不是文字。它是Scala的中缀符号系统使用的方法。

__ \ "a" \ "b"

的语法糖
(JsPath.\("a")).\("b")

因此尝试将路径打包为String,然后将其作为参数传入是没有意义的。您只能将String参数传递给每个方法,但是您需要确切地知道您提前尝试进入JsValue结构的级别。