JSON.SET - 亚马逊 ElastiCache

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

JSON.SET

在路径上设置JSON值。

如果路径调用对象成员:

  • 如果父元素不存在,则该命令将返回NONEXISTENT错误。

  • 如果父元素存在但不是对象,则命令返回ERROR。

  • 如果父元素存在并且是对象:

    • 如果成员不存在,当且仅当父对象是路径中的最后一个子对象时,才会将新成员附加到父对象。否则,该命令将返回NONEXISTENT错误。

    • 如果该成员存在,则其值将被该JSON值替换。

如果路径调用数组索引:

  • 如果父元素不存在,则该命令将返回NONEXISTENT错误。

  • 如果父元素存在但不是数组,则命令返回ERROR。

  • 如果父元素存在但索引超出范围,则该命令将返回OUTOFBOUNDARIES错误。

  • 如果父元素存在且索引有效,则该元素将被新JSON值替换。

如果路径调用对象或数组,则该值(对象或数组)将被新JSON值替换。

语法

JSON.SET <key> <path> <json> [NX | XX]

[NX | XX],其中您可以有 0 或 1 个 [NX | XX] 标识符。

  • 密钥(必填)— JSON 文档类型的 Valkey 或 Redis OSS 密钥。

  • 路径(必填)-JSON 路径。对于新密钥,JSON路径必须是根 “.”。

  • NX(可选)-如果路径是根,则仅在密钥不存在时才设置该值。也就是插入新文档。如果路径不是根目录,仅在路径不存在时设置该值。也就是在文档中插入一个值。

  • XX(可选)-如果路径是根,则仅在密钥存在时才设置该值。也就是替换现有文档。如果路径不是根目录,则仅在路径存在时设置该值。也就是更新现有值。

Return

  • 成功时使用简单字符串“OK”。

  • 如果未满足 NX 或 XX 条件,则为 Null。

示例

增强的路径语法:

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