2013-02-07 74 views
33

在演奏中2.1讀取用於將Json編組爲對象。但是,如果案例類只有一個字段,我該如何做到這一點。用於更多領域的ideom不起作用,因爲一個領域'和'沒有被使用。因此我沒有得到一個FunctionBuilder。如何在案例分類只有一個字段時將json轉爲案例類

下面的代碼給我一個類型不匹配。我怎樣才能解決這個問題?

case class Data(stamm: Seq[String]) 


implicit val dataReads = (
    (__ \ "stamm").read(Reads.list[String]) 
)(Data) 

回答

41

隨着朱利安回答,您可以讀取單場情況下

case class Person(name: String) 

val personReads: Reads[Person] = 
    (__ \ "name").read[String].map { name => Person(name) } 

只是一個補充,如果你想寫:使用本類

val personWrites: Writes[Person] = 
    (__ \ "name").write[String].contramap { (person: Person) => person.name } 

或格式(讀寫):

val personFormat: Format[Person] = 
    (__ \ "name").format[String].inmap(name => Person(name), (person: Person) => person.name) 

對於寫和格式,你必須輸入這個:

import play.api.libs.functional.syntax._ 
+1

閱讀以上,在personWrites的例子中,應該(名稱:Person)be(person:Person)? – gknauth

+0

是的,謝謝!固定。 – yokomizor

+2

謝謝你!你節省了很多我的時間。但問題是人們如何設計圖書館 - 爲什麼這個簡單的事情不像許多領域一樣使用相同的方法%) –

7

基於@ yokomizor的答案,我發現最簡單的解決方案創建Formatter

case class Person(name: String) 
val personFormatter: Format[Person] = 
    (__ \ "full_name").format[String].inmap(Person.apply, unlift(Person.unapply)) 
0

甚至比接受的更簡單的解決方案:

case class A(value: String) 
val reads = (__ \ "key").read[String].map(A.apply) 
相關問題