2014-01-09 57 views
0

我嘗試在播放模板中傳遞數據Seq [],並根據Play Framework文檔(http://www.playframework.com/documentation/2.2.x/ScalaJson),將其轉換爲Json數組。我嘗試這樣做:如何將scala Seq []轉換爲Javascript數組?

$(function() { 
    var jsArray = JSON.toJSON(customerList); 
    alert("Customer 1 : " + jsArray[0]); 
    for (var e in jsArray) { 
     setCustomers(e["name"], e["id"]); 
    } 
    }); 

而Chrome控制檯顯示我的錯誤消息:

Uncaught TypeError: Object #<Object> has no method 'toJSON' 

我試圖導入play.api.libs.json._,但它並沒有工作過。

任何人都可以幫到我嗎?

回答

0

試試這個:

$(function() { 
    var jsArray = @Json.toJson(customerList); 
    alert("Customer 1 : " + jsArray[0]); 
    for (var e in jsArray) { 
     setCustomers(e["name"], e["id"]); 
    } 
    }); 

的@將迎來剩餘的代碼被執行Scala代碼。沒有@的代碼將被作爲是對瀏覽器和瀏覽器不知道玩」的Scala JSON庫

根據您的意見,customerList具有類型Seq[Customer]因此,你必須確保在有一個解串器Customer模板範圍。

假設你已經在models包中定義的Customer類和你讀the documentation您會有與你一起定義Customer隱格式Customer對象。在這種情況下,您需要在模板頂部的import models.Customer

樣本客戶定義看起來像 包款

case class Customer(name:String,...) 
object Customer{ 
    import play.api.libs.json._ 
    implicit val customerFormats=Json.format[Customer] 
} 

如果您Customer類型取決於其他自定義類型,則需要對這些太例如導入或定義的Json序列化:

package models 
case class CustomerAddress(street:String,postCode:String) 
case class Customer(name:String,address:CustomerAddress,...) 
object Customer{ 
    import play.api.libs.json._ 
    // need to define 2 json formats : 1 for CustomerAddress and 1 for Customer 
    implicit val customerAddressFormats=Json.format[CustomerAddress] 
    implicit val customerFormats=Json.format[Customer] 
} 

根據您的意見,Customer類是在另一個可能不依賴於Play的項目中定義的,在這種情況下,您仍然可以在另一個對象中定義自定義序列化器

package models 
object IdentityAccessComponentFormats{ 
    import play.api.libs.json._ 
    implicit val customerAddressFormats=Json.format[CustomerAddress] 
    implicit val customerFormats=Json.format[Customer] 
} 

再加入

import models.IdentityAccessComponentFormats._ 

+0

我已經試過您的模板的頂部,併發揮顯示器:'沒有發現:價值JSON' – Azuken

+0

正確的語法是JSON(大寫'J'小寫'兒子')JSON是JavaScript JSON庫入口點的名稱。 Json是play'scala JSON庫入口點的名稱。 – Jean

+0

現在我這樣做了:'找不到類型爲Seq [Customer]的Json解串器。嘗試實現這種類型的隱式寫入或格式。「我嘗試了'Json.stringtify'但沒有結果。 – Azuken

相關問題