2015-01-07 24 views
6

Herkes, Scala ile Play çerçevesindeki (özellikle Play v2.3.x) POJO veya sınıf örneğini JSON'a nasıl dönüştürebilir? ÖrneğinOyun çerçevesi 2.3.x (Scala) içinde POJO JSON nasıl dönüştürülür?

bu gibi bir kod vardır:

case class Foo(name: String, address: String) 

def index = Action { 
     request => { 
     val foo = Foo("John Derp", "Jem Street 21") // I want to convert this object to JSON 
     Ok(Json.toJson(foo)) // I got error at here 
     } 
} 

hata iletisi:

HTTP yanıtı com.fasterxml.jackson.data bind.JsonNode bir örneğini yazılamıyor. Bir Yazılabilir [com.fasterxml.jackson.databind.JsonNode]

UPDATE tanımlamak için deneyin: Yukarıdaki hata Json sınıfının yanlış ithalat kaynaklanır öğrendim, bu olmalıdır: import play.api.libs.json.Json. Bununla birlikte, aşağıdaki örtük sorun hakkında hala hatam var.

Ben this tutorial okudum

ama örtülü Writes[Foo] kod çalıştığında: Ben Can't resolve symbol and var

implicit val fooWrites: Writes[Foo] = (
     (JsPath \ "name").write[String] and 
      (JsPath \ "address").write[String] 
     )(unlift(Foo.unapply)) 

ve IntelliJ içinde Can't resolve symbol unlift hatası. Ayrıca öğreticinin kodu sadece bir nesnenin JSON'a dönüştürülmesi için karmaşık görünüyor. Bunu yapmak için daha basit bir yol olup olmadığını merak ediyorum?

cevap

7

Sen Json.writes kullanarak bir Writes[Foo] örneğini alabilirsiniz:

implicit val fooWrites = Json.writes[Foo] 

kapsamında bu örtülü olması, JSON Foo dönüştürmek için ihtiyaç vardır. JSON reads/writes hakkında daha fazla bilgi için here ve here belgelerine bakın.

+0

Hi kullanın çok teşekkürler. Json'u 2.3 Oyunculuğunun kullanımıyla ilgili basit bir kılavuz veya belge bulabilirmiyim? Ayrıca, denediğim orijinal örtülü Write'lerde "Çözemez sembolü ve" (ve "unlift") hatasını açıklayabilir misiniz? (güncellenmiş soruya bakın, kodu buraya koydum) – null

+1

Sembol hatasını çözmek için 'play.api.libs.functional.syntax._' öğesini almanız gerekiyor. Sağladığım dokümantasyon bağlantıları, Play JSON hakkında yeterince genel bilgi içeren 'unlift' hakkındaki sorunuzu yanıtlamalıdır. – edi

+1

Merhaba, bir kez daha, yardım için çok teşekkürler. Intellij'un ithalatı neden tespit edemediğini merak ediyorum. – null

1

İkinci sorun - Can't resolve symbol and - Scala eklentisinin 1.3 sürümünde tanıtılan bir Intellij bug sürümüdür. Scala eklentisi sürümü 1.3.3, artık bir çözüm bulunmamaktadır - set tercihi onay kutusu:

Diller & Çerçeveleri> Scala> Çekirdek (varsayılan) sekmesi> Eski örtük arama algoritmasını