如何将scala Seq []转换为Javascript数组?

时间:2014-01-09 09:58:30

标签: javascript json scala playframework-2.0

我尝试在播放模板中传递数据Seq [],并根据Play Framework doc(http://www.playframework.com/documentation/2.2.x/ScalaJson),您可以将其转换为Json数组。我试过这个:

$(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._,但它也不起作用。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分: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设置反序列化程序。

假设您在Customer包中定义了models类并且您阅读了the documentation,那么您将拥有一个Customer对象,其中隐含格式与{{1}一起定义}}。在这种情况下,您需要在模板顶部显示Customer

示例客户定义如下所示     包装模型

import models.Customer

如果您的case class Customer(name:String,...) object Customer{ import play.api.libs.json._ implicit val customerFormats=Json.format[Customer] } 类型依赖于其他自定义类型,您还需要导入或定义这些类型的Json序列化程序,例如:

Customer

根据您的评论,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] } 类在另一个可能不依赖于Play的项目中定义,在这种情况下,您仍然可以在另一个对象中定义自定义序列化程序

Customer

然后添加

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

位于模板顶部