You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis调用JSON.SET新增对象键值对报wrong static path错误

错误触发原因
  • 核心原因是路径不符合RedisJSON模块的静态路径校验规则:你在拼接路径时直接用.连接带横杠-的UUID格式optionId,横杠会被路径解析器识别为减号操作符,不是键名的组成部分;加上你调用JSON.SET时传入了NX参数,该模式下RedisJSON强制要求路径是无表达式的明确静态路径,解析失败就会抛出wrong static path错误。
  • 额外的层级错误:从你给出的JSON结构看,optionId对应的权重值应该存放在weight.options空对象下,你当前拼接的路径是直接在weight节点下追加子键,就算路径语法校验通过,也会把键值对写到错误的层级。
修复方法
  1. 先修正路径基准层级,确保路径最终定位到weight.options节点下。
  2. 对包含特殊字符(横杠、点、空格等)的键名,不要直接用.拼接,改用['键名']的格式转义引用,让解析器把内容识别为完整键名,而非路径操作符。
  3. 调整Lua代码的路径拼接逻辑,参考实现如下:
local optionId = 'a161713a-1987-4974-acfc-dd0a56ad99e7'
local weight = 20
-- 假设原weightPath是指向weight节点的路径(例如$.weight),追加.options定位到选项存储容器
-- 对optionId用方括号+单引号包裹做转义,避免特殊字符破坏路径解析
local targetPath = string.format("%s.options['%s']", weightPath, optionId)
redis.call('JSON.SET', schemaKey, targetPath, weight, 'NX')

执行成功后,目标JSON结构会更新为:

"weight": {
            "options": {
              "a161713a-1987-4974-acfc-dd0a56ad99e7": 20
            },
            "value": 50
}

补充说明:只要键名不是纯字母、数字、下划线组成,在RedisJSON路径里引用都建议用['键名']的格式转义,能规避绝大多数路径解析错误。

内容的提问来源于stack exchange,提问作者Mohammed Ehab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:15:45