Next is the trait that allows Simplified Json syntax :
Next is the trait that allows Simplified Json syntax :
Example :
JsObject(Seq( "key1", JsString("value"), "key2" -> JsNumber(123), "key3" -> JsObject(Seq("key31" -> JsString("value31"))) )) == Json.obj( "key1" -> "value", "key2" -> 123, "key3" -> obj("key31" -> "value31")) JsArray(JsString("value"), JsNumber(123), JsBoolean(true)) == Json.arr( "value", 123, true )
There is an implicit conversion from any Type with a Json Writes to JsValueWrapper which is an empty trait that shouldn't end into unexpected implicit conversions.
Something to note due to JsValueWrapper
extending NotNull
:
null
or None
will end into compiling error : use JsNull instead.
Convert a JsValue to its string representation, escaping all non-ascii characters using \uXXXX syntax.
Convert a JsValue to its string representation, escaping all non-ascii characters using \uXXXX syntax.
This is particularly useful when the output JSON will be executed as javascript, since JSON is not a strict subset of javascript (see JSON: The JavaScript subset that isn't).
scala> Json.asciiStringify(JsString("some\u2028text\u2029")) res0: String = "some\u2028text\u2029" scala> Json.stringify(JsString("some\u2028text\u2029")) res1: String = "sometext"
the JsValue to convert
a String with the json representation with all non-ascii characters escaped.
Creates a Format[T] by resolving case class fields & required implicits at COMPILE-time
Creates a Format[T] by resolving case class fields & required implicits at COMPILE-time
If any missing implicit is discovered, compiler will break with corresponding error.
import play.api.libs.json.Json case class User(name: String, age: Int) implicit val userWrites = Json.format[User] // macro-compiler replaces Json.format[User] by injecting into compile chain // the exact code you would write yourself. This is strictly equivalent to: implicit val userWrites = ( (__ \ 'name).format[String] and (__ \ 'age).format[Int] )(User.apply, unlift(User.unapply))
Transform a stream of JsValue to a stream of A, keeping only successful results
Transform a stream of JsValue to a stream of A, keeping only successful results
val jsonStream: Enumerator[JsValue] = ??? val fooStream: Enumerator[Foo] = jsonStream &> Json.fromJson
Provided a Reads implicit for that type is available, convert a JsValue to any type.
Provided a Reads implicit for that type is available, convert a JsValue to any type.
Json value to transform as an instance of T.
Parse a byte array representing a json, and return it as a JsValue.
Parse a byte array representing a json, and return it as a JsValue.
The character encoding used will be automatically detected as UTF-8, UTF-16 or UTF-32, as per the heuristics in RFC-4627.
a byte array to parse
the JsValue representing the byte array
Parse an InputStream representing a json, and return it as a JsValue.
Parse an InputStream representing a json, and return it as a JsValue.
as InputStream to parse
the JsValue representing the InputStream
Parse a String representing a json, and return it as a JsValue.
Parse a String representing a json, and return it as a JsValue.
a String to parse
the JsValue representing the string
Convert a JsValue to its pretty string representation using default Jackson pretty printer (line feeds after each fields and 2-spaces indentation).
Convert a JsValue to its pretty string representation using default Jackson pretty printer (line feeds after each fields and 2-spaces indentation).
scala> Json.stringify(Json.obj( "field1" -> Json.obj( "field11" -> "value11", "field12" -> Json.arr("alpha", 123L) ) )) res0: String = {"field1":{"field11":"value11","field12":["alpha",123]}} scala> Json.prettyPrint(res0) res1: String = { "field1" : { "field11" : "value11", "field12" : [ "alpha", 123 ] } }
the JsValue to convert
a String with the json representation
Creates a Reads[T] by resolving case class fields & required implcits at COMPILE-time.
Creates a Reads[T] by resolving case class fields & required implcits at COMPILE-time.
If any missing implicit is discovered, compiler will break with corresponding error.
import play.api.libs.json.Json case class User(name: String, age: Int) implicit val userReads = Json.reads[User] // macro-compiler replaces Json.reads[User] by injecting into compile chain // the exact code you would write yourself. This is strictly equivalent to: implicit val userReads = ( (__ \ 'name).read[String] and (__ \ 'age).read[Int] )(User)
Convert a JsValue to its string representation.
Convert a JsValue to its string representation.
scala> Json.stringify(Json.obj( "field1" -> Json.obj( "field11" -> "value11", "field12" -> Json.arr("alpha", 123L) ) )) res0: String = {"field1":{"field11":"value11","field12":["alpha",123]}} scala> Json.stringify(res0) res1: String = {"field1":{"field11":"value11","field12":["alpha",123]}}
the JsValue to convert
a String with the json representation
Transform a stream of A to a stream of JsValue
Transform a stream of A to a stream of JsValue
val fooStream: Enumerator[Foo] = ??? val jsonStream: Enumerator[JsValue] = fooStream &> Json.toJson
Provided a Writes implicit for its type is available, convert any object into a JsValue.
Provided a Writes implicit for its type is available, convert any object into a JsValue.
Value to convert in Json.
Creates a Writes[T] by resolving case class fields & required implcits at COMPILE-time
Creates a Writes[T] by resolving case class fields & required implcits at COMPILE-time
If any missing implicit is discovered, compiler will break with corresponding error.
import play.api.libs.json.Json case class User(name: String, age: Int) implicit val userWrites = Json.writes[User] // macro-compiler replaces Json.writes[User] by injecting into compile chain // the exact code you would write yourself. This is strictly equivalent to: implicit val userWrites = ( (__ \ 'name).write[String] and (__ \ 'age).write[Int] )(unlift(User.unapply))
Helper functions to handle JsValues.