簡體   English   中英

在scala.html文件中將字符串轉換為JSON

[英]Convert a String to JSON in scala.html file

我目前在scala.html文件中使用PropertyDTO的列表來用Play2填充視圖。 propertyDTO具有String屬性“ value”,其中包含JSON String。 我想將此字符串轉換為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]
            }     
        }
    }

我不建議在模板中執行此操作-具有模板,而不是將HTML生成直接嵌入到Scala代碼中,是為了將視圖邏輯與應用程序邏輯分開。 如果您將這樣的Scala代碼嵌入模板中,那么使用模板有什么意義呢?

最佳實踐是在調用模板之前准備好要渲染的所有數據,然后將其傳遞到模板中,並使模板盡可能啞,僅迭代和渲染值。

問題是,您需要通過在其前面加上@來聲明要解釋為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

請記住,將盡可能少的邏輯放入模板中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM