我正在使用带有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(列表((/ “活性\” 陆上 “\” 桑尼维尔“
任何帮助将不胜感激。提前致谢。
答案 0 :(得分:2)
\符号不是文字。它是Scala的中缀符号系统使用的方法。
__ \ "a" \ "b"
是
的语法糖(JsPath.\("a")).\("b")
因此尝试将路径打包为String,然后将其作为参数传入是没有意义的。您只能将String参数传递给每个方法,但是您需要确切地知道您提前尝试进入JsValue结构的级别。