- 用法
-
JSON.SET key path json [ options ]
- 复杂度
- O(N),其中 N 是路径匹配到的 JSON 值的数量。
- 模块
- valkey-json
- 模块版本起始
- 1.0.0
- ACL 类别
- @write, @slow, @json, @slow
- 如果路径指向一个对象成员
- 如果父元素不存在,命令将返回 NONEXISTENT 错误。
- 如果父元素存在但不是一个对象,命令将返回 ERROR 错误。
- 如果父元素存在且是一个对象
- 如果成员不存在,当且仅当父对象是路径中的最后一个子元素时,新成员将被添加到父对象。否则,命令将返回 NONEXISTENT 错误。
- 如果成员存在,其值将被新的 JSON 值替换。
- 如果路径指向一个数组索引
- 如果父元素不存在,命令将返回 NONEXISTENT 错误。
- 如果父元素存在但不是一个数组,命令将返回 ERROR 错误。
- 如果父元素存在但索引超出范围,命令将返回 OUTOFBOUNDARIES 错误。
- 如果父元素存在且索引有效,该元素将被新的 JSON 值替换。
- 如果路径指向一个对象或数组,该值(对象或数组)将被新的 JSON 值替换。
在给定路径设置 JSON 值。
示例
增强路径语法
127.0.0.1:6379> JSON.SET k1 . '{"a":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.SET k1 $.a.* '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"
127.0.0.1:6379> JSON.SET k2 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k2 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":[0,0,0,0,0]}"
受限路径语法
127.0.0.1:6379> JSON.SET k1 . '{"c":{"a":1, "b":2}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k1 .c.a '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.SET k1 .e[-1] '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,0]}"
127.0.0.1:6379> JSON.SET k1 .e[5] '0'
(error) OUTOFBOUNDARIES Array index is out of bounds