JSON.MERGE

语法
JSON.MERGE key path value
可用版本
Redis Stack / JSON 2.6.0
时间复杂度
当路径解析为单个值时为 O(M+N),其中 M 是原始值的大小(如果存在),N 是新值的大小;当路径解析为多个值时为 O(M+N),其中 M 是键的大小,N 是新值的大小 * 键中原始值的数量。

将给定的 JSON 值合并到匹配的路径中。因此,匹配路径上的 JSON 值会更新、删除或扩展为新的子节点。

此命令符合 RFC7396 Json Merge Patch。

示例

必需参数

key

是要合并的键。

path

指定 JSONPath。对于不存在的键,path 必须是 $。对于存在的键,对于每个匹配的 path,匹配 path 的值将与 JSON value 合并。对于存在的键,当路径存在时,除了最后一个元素之外,会使用 JSON value 添加新的子节点。

value

是要在指定路径上合并的 JSON 值。合并是根据 value 参数中的每个 JSON 值执行的,同时考虑如果存在相应的原始值。

  • 将现有对象键与 null 值合并会删除该键
  • 将现有对象键与非 null 值合并会更新该值
  • 合并不存在的对象键会添加键和值
  • 将现有数组与任何合并的值合并会将整个数组替换为该值

返回值

JSON.MERGE 返回一个简单的字符串回复:如果执行成功则为 OK,如果无法设置新值则为 error

有关回复的更多信息,请参见 Redis 序列化协议规范

示例

JSON.MERGE 提供四种不同的行为来合并对给定键的更改:创建不存在的路径、使用新值更新现有路径、删除现有路径或用新数组替换数组。

创建不存在的路径-值
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.MERGE doc $.b '8'
OK
redis> JSON.GET doc $
"[{\"a\":2,\"b\":8}]"
替换现有值
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.MERGE doc $.a '3'
OK
redis> JSON.GET doc $
"[{\"a\":3}]"
删除现有值
redis> JSON.SET doc $ '{"a":2}'
OK
redis> JSON.MERGE doc $ '{"a":null}'
OK
redis> JSON.GET doc $
"[{}]"
替换数组
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]}]"
合并多路径中的更改
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]}"

另请参阅

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


RATE THIS PAGE
Back to top ↑