2017-08-24 16 views
0

に異なる構造にオブジェクトを解析しますJSONに解析した後):プレイフレームワークは、どのように、次のように私は、オブジェクトを持つScalaの

{ 
    "id": { 
     "value": "Foo" 
    }, 
    "age": "20" 
} 

しかし私は適切な結果を得るために、私のカスタムwritesを書く必要がありますどのように

{ 
    "id": "Foo" 
    "age": "20" 
} 

:プロパティは、私には冗長なようだ、私は次の形式をしたいですか?

ありがとうございます。

答えて

1
import play.api.libs.json.{JsValue, Json, Writes} 

case class Person(id: Identifier, age: Int) 
case class Identifier(value: String) 

implicit val writer = new Writes[Person]{ 
    def writes(o: Person): JsValue = Json.obj("id" -> o.id.value, "age" -> o.age) 
} 

Json.toJson(Person(Identifier("hi"), 5)) 
+0

val r: Reads[Identifier] = Json.reads[String].map(Identifier(_)) val w: Writes[Identifier] = Json.writes[String].transform { i: Identifier => i.value } 
'新しい書き込み[T] {DEF(V:T)を書き込む= X}'設けられた機能工場 'Writes.apply'によって容易になります。'書き込み[T] {v => x} ' – cchantep

1

Identifierタイプが(BTWむしろ値クラスになるだろう)Stringラッパーと非常によく似ています。

コンビネータはJSONハンドラで利用可能である:

関連する問題