2017-09-21 6 views
0

のは、私がPersonクラスのカスタムReads[Person]を記述する必要がありましょう:プレイJSON:カスタム1つのフィールドを読み込む

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

implicit val personReads: Reads[Person] = (
    (__ \ "name").read[String] and // or ~ 
     (__ \ "age").readNullable[Int] 
    ) ((name, age) => Person(name = name, age = age)) 

それは魔法のように動作し、本当に(なし)。

しかし、jsonオブジェクトにフィールドが1つしかない場合、私は何ができますか?

ReadsおよびWritesのコアは、これらの「解析」ステップを変換する機能構文です。

次はコンパイルされません:

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

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

あなたはそれに対処する方法をアドバイスもらえますか?

答えて

1

オプション1:Reads.map

import play.api.libs.json._ 

case class Person(name: String) 

object PlayJson extends App { 
    implicit val readsPeson: Reads[Person] = 
    (__ \ "name").read[String].map(name => Person(name)) 

    val rawString = """{"name": "John"}""" 
    val json = Json.parse(rawString) 
    val person = json.as[Person] 
    println(person) 
} 

オプション2:Json.reads

import play.api.libs.json._ 

case class Person(name: String) 

object Person { 
    implicit val readsPerson = Json.reads[Person] 
} 

object PlayJson extends App { 
    val rawString = """{"name": "John"}""" 
    val json = Json.parse(rawString) 
    val person = json.as[Person] 
    println(person) 
} 
関連する問題