在scala.html文件中将String转换为JSON

时间:2013-12-18 05:39:26

标签: json scala playframework-2.0

我目前在我的scala.html文件中使用PropertyDTO列表来使用Play2填充视图。 propertyDTO具有String属性“value”,其中包含JSON字符串。我想将此字符串转换为scala.html文件中的JSON对象,并遍历JSON对象集合。尝试以下操作时,

val json = Json.parse(property.value),作为scala代码中的[JsObject],它打印表达式。我想知道我的方法是否正确,如果没有,是否有合适的解决方案。

代码 - > scala.html

    @(propertyList : List[PropertyDTO])

    @for(property <- propertyList){
        @if(property.isInputProperty){
            @if(property.propertyType=="BL"){         
                val json = Json.parse(property.value).as[JsObject]
            }     
        }
    }

2 个答案:

答案 0 :(得分:3)

我不建议在模板中执行此操作 - 拥有模板,而不是将HTML生成直接嵌入到Scala代码中,就是将视图逻辑与应用程序逻辑分开。如果你在模板中嵌入这样的Scala代码,那么使用模板有什么意义呢?

最佳做法是在调用模板之前准备好所有数据进行渲染,然后将其传递到模板中,并尽可能保持模板的哑,只需迭代和渲染值。

答案 1 :(得分:0)

问题是你需要通过在它前面放置一个@来声明代码被解释为scala代码。这条线

val json = Json.parse(property.value).as[JsObject]

被解释为HTML,因为指示scala代码的行中没有@符号。您可以做的是使用@{ ... }声明整个块以包含scala代码。

例如,您可以将您的理解结果存储在变量中,以便以后在模板中使用:

@import play.api.libs.json._

@validPropertiesAsJson = @{
  for{
    property <- propertyList
    if property.isInputProperty
    if property.propertyType == "BL"
  } yield Json.parse(property.value).as[JsObject]
}

稍后在模板中使用@validPropertiesAsJson来包含值。 更多信息可以在playframework文档中找到:http://www.playframework.com/documentation/2.2.0/ScalaTemplates

请记住尽可能少地将逻辑放入模板中。