xke playframework's json in scala
TRANSCRIPT
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;
…
}
Building a JsValue
Types
● JsString● JsNumber● JsBoolean● JsObject● JsArray● JsNull
Json.parse("""
|{
| "name" : "Jennifer",
| "Age": 26
|}
""".stripMargin
)
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 _)
}
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]]