( \ '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
( \ '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 :
val js = Json.obj("key1" -> "value1", "key2" -> "value2") js.validate( (__ \ 'key3).json.copyFrom((__ \ 'key2).json.pick)) => JsSuccess({"key3":"value2"},/key2)
( \ '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]
( \ '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 :
val js = Json.obj("key1" -> "value1", "key2" -> "value2") js.validate((__ \ 'key2).json.pick) => JsSuccess("value2",/key2)
( \ '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]
( \ '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 :
val js = Json.obj("key1" -> "value1", "key2" -> 123) js.validate((__ \ 'key2).json.pick[JsNumber]) => JsSuccess(JsNumber(123),/key2)
( \ '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]
( \ '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 :
val js = Json.obj("key1" -> "value1", "key2" -> Json.obj( "key21" -> "value2") ) js.validate( (__ \ 'key2).json.pickBranch ) => JsSuccess({"key2":{"key21":"value2"}},/key2)
( \ '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]
( \ '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 :
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.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 :
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: - creates a JsObject setting A (inheriting JsValue) at given JsPath - returns a JsResult[JsObject]
( \ '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 :
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: - 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
( \ '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 :
val js = Json.obj("key1" -> "value1", "key2" -> "value2") js.validate(__.json.update((__ \ 'key3).json.put(JsString("value3")))) => JsSuccess({"key1":"value1","key2":"value2","key3":"value3"},)