2014-01-09 5 views
0

Я пытаюсь передать данные Seq [] в шаблоне игры, и в соответствии с документом Play Framework doc (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"]); 
    } 
    }); 

Но хромированная консоль показать мне сообщение об ошибке:

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 для выполнения. без @ код будет послан как в браузере, и браузер не знает библиотеку играть»Скала JSon

По вашему комментарию, customerList имеет тип Seq[Customer] поэтому вы должны быть уверены, чтобы иметь десериализатор для Customer в область шаблона.

Предполагая, что вы имеете Customer класс, определенный в models упаковке, и вы читали 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 - это название точки входа в библиотеку scala JSON. – Jean

+0

Теперь у меня это: 'Dessonializer' Json не найден для типа Seq [Customer]. Попытайтесь реализовать неявные Writes или Format для этого типа. «Я попробовал' Json.stringtify', но никакого результата. – Azuken

Смежные вопросы