xke playframework's json in scala

13
Json mapping in pLAY! Fabian Gutierrez

Upload: fabian-gutierrez

Post on 21-Mar-2017

107 views

Category:

Technology


2 download

TRANSCRIPT

Json mapping in pLAY!

Fabian Gutierrez

Mandatory verbose java example

Jonathan

@JsonInclude(JsonInclude.Include.NON_NULL)

@Generated("org.jsonschema2pojo")

@JsonPropertyOrder({ "name", "age" })

public class Actor {

@JsonProperty("nombre") private String name;

@JsonProperty("age") private Integer age;

}

Seriously

● Building JsValues● Reads● Writes● Paths

Play’s json mapper

Building a JsValue

Types

● JsString● JsNumber● JsBoolean● JsObject● JsArray● JsNull

Json.parse("""

|{

| "name" : "Jennifer",

| "Age": 26

|}

""".stripMargin

)

The Reader

Reading Json

case class Actor(name: String, age: Int)

object Actor {

// or default values

implicit val actorReads = Json.reads[Actor]

// functional syntax

implicit val actorReads: Reads[Actor] = ( (JsPath \ "nombre").read[String] and (JsPath \ "age").read[Int] )(Actor.apply _)

}

The (ghost) writer

Writing Jsonobject Actor {

//default values

implicit val actorWrites = Json.writes[Actor]

//or total control

implicit val actorWrites = new Writes[Actor] {

def writes(actor: Actor) = Json.obj( "name" -> actor.name, "age" -> actor.age ) }

//or functional syntax

implicit val actorWrites: Writes[Actor] = ( (JsPath \ "name").write[String] and (JsPath \ "age").write[Int] )(unlift(Actor.unapply))

}

Paths

// direct parsing

val jsPerson: JsObject = ...

(jsPerson \"name").as[String]

(jsPerson \"age").as[Int]

// as optionals

val jsPersonList: JsObject = ...

(jsPersonList \\"name").asOpt[List[String]]

https://github.com/fagossa/xke_play_json