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 文档许可。