[英]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.