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

如何将scala Seq[]转换为Javascript数组?,javascript,json,scala,playframework-2.0,Javascript,Json,Scala,Playframework 2.0,我尝试在play模板中传递一个数据Seq[],根据play框架文档,您可以将其转换为Json数组。我试过这个: $(function() { var jsArray = JSON.toJSON(customerList); alert("Customer 1 : " + jsArray[0]); for (var e in jsArray) { setCustomers(e["name"], e["id"]); } }); 但是chrome控制台会

我尝试在play模板中传递一个数据Seq[],根据play框架文档,您可以将其转换为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.u,但它也不起作用

有人能帮我吗

试试这个:

$(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设置反序列化程序

假设您在modelspackage中定义了Customer类,并且您已经阅读了,那么您将拥有一个Customerobject,其隐式格式与您的客户一起定义。在这种情况下,您需要导入模型。客户位于模板顶部

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

case class Customer(name:String,...)
object Customer{
  import play.api.libs.json._
  implicit val customerFormats=Json.format[Customer]
}
如果Customertype依赖于其他自定义类型,则还需要为这些类型导入或定义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._

在模板顶部

我已经尝试过了,播放显示:未找到:value Json正确的语法是Json大写字母“J”小写字母“son”Json是javascript Json库入口点的名称。Json是play'scala Json库入口点的名称。现在我发现:没有找到Seq[Customer]类型的Json反序列化程序。尝试实现此类型的隐式写入或格式。我尝试了Json.stringtify,但没有结果。我更新了我的答案,以反映您的customerList是Seq[Customer]这一事实。我明白您的意思,但我的Customer类来自于我使用SBT在scala中开发的一个库,因此我在我的Play项目中实现了它,并在我的模板中按如下方式导入:@customerList:Seq[com.example.identityaccesscomponent.models.customer.customer]