繁体   English   中英

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

[英]How to convert a scala Seq[] to a Javascript Array?

我尝试在播放模板中传递数据Seq [],然后根据Play框架文档( 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._但它也无法正常工作。

有人可以帮助我吗?

尝试这个 :

$(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类,并且阅读了文档,那么您将拥有一个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._

在模板顶部

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM