json

play.api.libs.json.JsPath.json
object json

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Self type
json.type

Members list

Value members

Concrete methods

def copyFrom[A <: JsValue](reads: Reads[A]): Reads[JsObject]

(__ \ 'key).json.copyFrom(reads) is a Reads[JsObject] that:

(__ \ 'key).json.copyFrom(reads) is a Reads[JsObject] that:

  • copies a JsValue using passed Reads[A]
  • creates a new branch from JsPath and copies previous value into it

Useful to copy a value from a JSON branch into another branch.

Example:

import play.api.libs.json.{ Json, __ }

val js = Json.obj("key1" -> "value1", "key2" -> "value2")
js.validate( (__ \ 'key3).json.copyFrom((__ \ 'key2).json.pick))
// => JsSuccess({"key3":"value2"},/key2)

Attributes

def pick[A <: JsValue](implicit r: Reads[A]): Reads[A]

(__ \ 'key).json.pick[A <: JsValue] is a Reads[A] that:

(__ \ 'key).json.pick[A <: JsValue] is a Reads[A] that:

  • picks the given value at the given JsPath (WITHOUT THE PATH) from the input JS
  • validates this element as an object of type A (inheriting JsValue)
  • returns a JsResult[A]

Useful to pick a typed JsValue at a given JsPath

Example:

import play.api.libs.json.{ Json, JsNumber, __ }

val js = Json.obj("key1" -> "value1", "key2" -> 123)
js.validate((__ \ 'key2).json.pick[JsNumber])
// => JsSuccess(JsNumber(123),/key2)

Attributes

(__ \ 'key).json.pick is a Reads[JsValue] that:

(__ \ 'key).json.pick is a Reads[JsValue] that:

  • picks the given value at the given JsPath (WITHOUT THE PATH) from the input JS
  • validates this element as an object of type JsValue
  • returns a JsResult[JsValue]

Useful to pick a JsValue at a given JsPath

Example:

import play.api.libs.json.{ Json, __ }

val js = Json.obj("key1" -> "value1", "key2" -> "value2")
js.validate((__ \ 'key2).json.pick)
// => JsSuccess("value2",/key2)

Attributes

def pickBranch[A <: JsValue](reads: Reads[A]): Reads[JsObject]

(__ \ 'key).json.pickBranch[A <: JsValue](readsOfA) is a Reads[JsObject] that:

(__ \ 'key).json.pickBranch[A <: JsValue](readsOfA) is a Reads[JsObject] that:

  • copies the given branch (JsPath + relative JsValue) from the input JS at this given JsPath
  • validates this relative JsValue as an object of type A (inheriting JsValue) potentially modifying it
  • creates a JsObject from JsPath and validated JsValue
  • returns a JsResult[JsObject]

Useful to create/validate an JsObject from a single JsPath (potentially modifying it)

Example:

import play.api.libs.json.{ Json, JsString, __ }

val js = Json.obj("key1" -> "value1", "key2" -> Json.obj( "key21" -> "value2") )
js.validate( (__ \ 'key2).json.pickBranch[JsString]( (__ \ 'key21).json.pick[JsString].map( (js: JsString) => JsString(js.value ++ "3456") ) ) )
// => JsSuccess({"key2":"value23456"},/key2/key21)

Attributes

(__ \ 'key).json.pickBranch is a Reads[JsObject] that:

(__ \ 'key).json.pickBranch is a Reads[JsObject] that:

  • copies the given branch (JsPath + relative JsValue) from the input JS at this given JsPath
  • creates a JsObject from JsPath and JsValue
  • returns a JsResult[JsObject]

Useful to create/validate an JsObject from a single JsPath (potentially modifying it)

Example:

import play.api.libs.json.{ Json, __ }

val js = Json.obj("key1" -> "value1", "key2" -> Json.obj( "key21" -> "value2") )
js.validate( (__ \ 'key2).json.pickBranch )
// => JsSuccess({"key2":{"key21":"value2"}},/key2)

Attributes

(__ \ 'key).json.prune is Reads[JsObject] that prunes the branch and returns remaining JsValue.

(__ \ 'key).json.prune is Reads[JsObject] that prunes the branch and returns remaining JsValue.

Example:

import play.api.libs.json.{ Json, __ }

val js = Json.obj("key1" -> "value1", "key2" -> "value2")
js.validate( (__ \ 'key2).json.prune )
// => JsSuccess({"key1":"value1"},/key2)

Attributes

def put(a: => JsValue): Reads[JsObject]

(__ \ 'key).put(fixedValue) is a Reads[JsObject] that:

(__ \ 'key).put(fixedValue) is a Reads[JsObject] that:

  • creates a JsObject setting A (inheriting JsValue) at given JsPath
  • returns a JsResult[JsObject]

This Reads doesn't care about the input JS and is mainly used to set a fixed at a given JsPath Please that A is passed by name allowing to use an expression reevaluated at each time.

Example:

import play.api.libs.json.{ Json, JsNumber, __ }

val js = Json.obj("key1" -> "value1", "key2" -> "value2")
js.validate( (__ \ 'key3).json.put( { JsNumber((new java.util.Date).getTime()) } ) )
// => JsSuccess({"key3":1376419773171},)

Attributes

def update[A <: JsValue](reads: Reads[A]): Reads[JsObject]

(__ \ 'key).json.update(reads) is the most complex Reads[JsObject] but the most powerful:

(__ \ 'key).json.update(reads) is the most complex Reads[JsObject] but the most powerful:

  • copies the whole JsValue => A
  • applies the passed Reads[A] on JsValue => B
  • deep merges both JsValues (A ++ B) so B overwrites A identical branches

Please note that if you have prune a branch in B, it is still in A so you'll see it in the result

Example:

import play.api.libs.json.{ Json, JsString, __ }

val js = Json.obj("key1" -> "value1", "key2" -> "value2")
js.validate(__.json.update((__ \ 'key3).json.put(JsString("value3"))))
// => JsSuccess({"key1":"value1","key2":"value2","key3":"value3"},)

Attributes