JSON 的 JSON 格式。合并

语法
JSON.MERGE key path value
可用:
Redis 堆栈 / JSON 2.6.0
时间复杂度:
O(M+N) 当 path 计算为单个值时,其中 M 是原始值的大小(如果存在),N 是新值的大小,O(M+N) 当 path 计算为多个值时,其中 M 是键的大小,N 是新值的大小 * 键中原始值的数量

将给定的 JSON 值合并到匹配的路径中。因此,匹配路径中的 JSON 值将更新、删除或使用新子项进行扩展。

此命令符合 RFC7396 Json 合并补丁

例子

必需参数

key

是要合并到的键。

path

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

value

是要在指定路径中与之合并的 JSON 值。合并是根据 JSON 中 JSON 值的以下规则完成的。value参数,同时考虑相应的原始值(如果存在):

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

返回值

JSON 的 JSON 格式。MERGE 返回一个简单的字符串回复:OK如果执行正确,或者errorif 设置新值失败

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

例子

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

创建不存在的 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 an 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