JSON.MERGE

Syntax
JSON.MERGE key path value
Available in:
Redis Stack / JSON 2.6.0
Time complexity:
O(M+N) when path is evaluated to a single value where M is the size of the original value (if it exists) and N is the size of the new value, O(M+N) when path is evaluated to multiple values where M is the size of the key and N is the size of the new value * the number of original values in the key

Merge a given JSON value into matching paths. Consequently, JSON values at matching paths are updated, deleted, or expanded with new children.

This command complies with RFC7396 Json Merge Patch

Examples

Required arguments

key

is key to merge into.

path

is JSONPath to specify. For non-existing keys the path must be $. For existing keys, for each matched path, the value that matches the path is being merged with the JSON value. For existing keys, when the path exists, except for the last element, a new child is added with the JSON value.

value

is JSON value to merge with at the specified path. Merging is done according to the following rules per JSON value in the value argument while considering the corresponding original value if it exists:

  • merging an existing object key with a null value deletes the key
  • merging an existing object key with non-null value updates the value
  • merging a non-existing object key adds the key and value
  • merging an existing array with any merged value, replaces the entire array with the value

Return value

JSET.MERGE returns a simple string reply: OK if executed correctly or error if fails to set the new values

For more information about replies, see Redis serialization protocol specification.

Examples

The JSON.MERGE provide four different behaviours to merge changes on a given key: create unexistent path, update an existing path with a new value, delete a existing path or replace an array with a new array

Create a unexistent path-value
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.MERGE doc $.b '8'
OK
redis> JSON.GET doc $
"[{\"a\":2,\"b\":8}]"
Replace an existing value
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.MERGE doc $.a '3'
OK
redis> JSON.GET doc $
"[{\"a\":3}]"
Delete on existing value
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.MERGE doc $ '{"a":null}'
OK
redis> JSON.GET doc $
"[{}]"
Replace an Array
redis> JSON.SET doc $ '{"a":[2,4,6,8]}'
OK
redis> JSON.MERGE doc $.a '[10,12]'
OK
redis> JSON.GET doc $
"[{\"a\":[10,12]}]"
Merge changes in multi-paths
redis> JSON.SET doc $ '{"f1": {"a":1}, "f2":{"a":2}}'
OK
redis> JSON.GET doc
"{\"f1\":{\"a\":1},\"f2\":{\"a\":2}}"
redis> JSON.MERGE doc $ '{"f1": null, "f2":{"a":3, "b":4}, "f3":[2,4,6]}'
OK
redis> JSON.GET doc
"{\"f2\":{\"a\":3,\"b\":4},\"f3\":[2,4,6]}"

See also

JSON.GET | JSON.MGET | JSON.SET | JSON.MSET


RATE THIS PAGE
Back to top ↑