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
参数,同时考虑相应的原始值(如果存在):
- 将现有对象键与
null
value 删除键 - 将现有对象键与非 null 值合并会更新该值
- 合并不存在的对象键会添加 key 和 value
- 将现有数组与任何合并的值合并时,将整个数组替换为值
返回值
JSON 的 JSON 格式。MERGE 返回一个简单的字符串回复:OK
如果执行正确,或者error
if 设置新值失败
有关回复的更多信息,请参阅 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
Related topics