json
Value members
Concrete methods
(__ \ '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)
(__ \ '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)
(__ \ '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)
(__ \ '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 givenJsPath
- validates this relative
JsValue
as an object of type A (inheritingJsValue
) potentially modifying it - creates a JsObject from
JsPath
and validatedJsValue
- 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)
(__ \ '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 givenJsPath
- creates a
JsObject
fromJsPath
andJsValue
- 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)
(__ \ '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)
(__ \ 'key).put(fixedValue)
is a Reads[JsObject]
that:
(__ \ 'key).put(fixedValue)
is a Reads[JsObject]
that:
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},)
(__ \ '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]
onJsValue => B
- deep merges both
JsValues (A ++ B)
soB
overwritesA
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"},)