2016-04-28 11 views
5

Bu JSON otomatikleştirilmiş örnekleme harita belgelerinden başarısız. niye ya? https://www.playframework.com/documentation/2.5.x/ScalaJsonAutomatedscala play json Hayır unapply veya unapplySeq işlevi bulundu

libraryDependencies += "com.typesafe.play" %% "play" % "2.5.0" 
--- 
import play.api.libs.json._ 
case class Resident(name: String, age: Int, role: Option[String]) 
implicit val residentWrites = Json.writes[Resident] 
println(Json.toJson(Resident("john", 33, None))) 
--- 
Error: No unapply or unapplySeq function found 
     implicit val residentWrites = Json.writes[Resident] 
+0

Benim için sadece başarısız olmaz. Amm repl'i açarım, load.ivy ("com.typesafe.play" %% "oyununu"% "2.5.0") ile bağımlı hale getirdim ve 4 satırlık kodunuzu "{" name ":" john "a yapıştırın "yaş": 33} '. Bu hata genellikle, 'sınıfınız' bir 'case class' olmadığında olur, ancak burada her şey yolunda. –

+0

Vay, Ammonite hakkında bilmiyordum! Harika görünüyor, şimdi bu –

+0

evet deneyeceğim, bu benim için de amm repl çalışır. : O projemi tekrar kontrol edeceğim –

cevap

6

sorunlu kod daha yüksek veya düşük benziyordu: Burada

import play.api.libs.json._ 

object Test { 
    def main(args: Array[String]): Unit = { 
    case class Resident(name: String, age: Int, role: Option[String]) 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

mesele bu makro görünüşte yöntemleri içinde tanımlanan sınıfları için çalışmıyor olmasıydı. Bu, bu tür şeyler yapmamaya rağmen, sorunlu bir sınırlama değildir. Sorun sınıf def gidermek için

nesne düzeyinde gibi başka bir yere hareket ettirilebilir

object Test { 
    case class Resident(name: String, age: Int, role: Option[String]) 

    def main(args: Array[String]): Unit = { 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

veya dosya düzeyinde

case class Resident(name: String, age: Int, role: Option[String]) 

object Test { 
    def main(args: Array[String]): Unit = { 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

Ben, bu asgari örnek görmek sadece kontrol amaçlı olduğunu anlıyorum ama Hala sınıfları Writes ile nasıl tanımladığımızdan bahsedeceğim. Eğer Resident içe zaman

object Resident { 
    implicit val residentWrites = Json.writes[Resident] 
} 

case class Resident(name: String, age: Int, role: Option[String]) 

Bu şekilde, onun yazma örtülü kapsamında olacak.

+0

case class def hatası, hata ilk görüntülendiğinde nesne düzeyinde idi. Sorunu göstermek için en az bir örnek oluştururken onu yöntemin içine taşıdım. Ancak farklı bir hata türünü aldığımı fark etmedim. –

+0

Eğer başka bir hatayı yeniden üretebilirseniz, bunu da çözebilirim. –

+0

thx. Sorunu buldum, bağımlılık için örtük bir 'Json.write' eksikti. –

İlgili konular