JSON.MERGE
将给定的 JSON 值合并到匹配的路径中。因此,匹配路径处的 JSON 值将被更新、删除或使用新子项扩展
语法
JSON.MERGE key path value
引入版本:2.6.0
复杂度摘要:O(M+N)
将给定的 JSON 值合并到匹配的路径中。因此,匹配路径处的 JSON 值将被更新、删除或使用新子项扩展。
该命令符合RFC7396 Json Merge Patch
必需参数
key
是合并的关键。
path
指定JSONPath。对于不存在的键,path 必须是 $。对于现有键,对于每个匹配的 path,与 path 匹配的值将与 JSON value 合并。对于现有键,当路径存在时,除了最后一个元素之外,将添加一个带有 JSON value 的新子元素。
value
是要在指定路径处合并的 JSON 值。合并根据 value 参数中每个 JSON 值的以下规则进行,同时考虑相应的原始值(如果存在): * 将现有对象键与 null 值合并会删除键 * 将现有对象键与非空值合并会更新值 * 合并不存在的对象键会添加键和值 * 将现有数组与任何合并值合并,将整个数组替换为该值
示例
JSON.MERGE 提供了四种不同的行为来合并给定键上的更改:创建不存在的路径、使用新值更新现有路径、删除现有路径或用新数组替换数组
Create a non-existent 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]}"
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
返回值
RESP2
以下之一: * 简单字符串回复:OK(如果执行正确)。 * 简单错误回复:如果操作失败则设置新值。
RESP3
以下之一: * 简单字符串回复:OK(如果执行正确)。 * 简单错误回复:如果操作失败则设置新值。
参见
JSON.GET | JSON.MGET | JSON.SET | JSON.MSET
相关主题
资料来源:Redis 官方 JSON.MERGE 文档;中文内容参考 Redis 文档许可。