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

Jedis调用jsonSet时报错:expected value at line 1 column 1

排查Jedis jsonSet抛出"expected value at line 1 column 1"异常的原因

以下是几个常见的排查方向和解决方案:

1. Redis服务器未安装RedisJSON模块

这是触发该异常最常见的原因。Jedis的jsonSet方法依赖RedisJSON扩展模块提供的JSON.SET命令,原生Redis并不支持这类JSON操作命令。当Redis收到未识别的命令时,返回的错误信息会导致Jedis解析失败,抛出该异常。

  • 验证方法:登录Redis客户端执行命令JSON.SET test . '{"discordName":"testName"}',如果返回(error) ERR unknown command 'JSON.SET',说明确实未安装RedisJSON。
  • 解决办法:切换使用Redis Stack(内置RedisJSON等模块),或者手动为现有Redis实例加载RedisJSON模块。

2. User对象序列化异常

Jedis默认通过Jackson将Java对象序列化为JSON字符串,如果User类的序列化配置不规范,可能导致生成的JSON为空或格式非法,进而触发Redis的格式校验错误。

  • 验证方法:手动序列化User对象,检查输出是否为合法JSON:
    ObjectMapper mapper = new ObjectMapper();
    try {
        String json = mapper.writeValueAsString(new User().setDiscordName("testName"));
        System.out.println(json);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    
    如果输出为空、缺失字段或抛出序列化异常,需要修正User类的配置:
    • 确保类有标准的getter/setter方法,或使用Lombok的@Data注解自动生成;
    • 链式调用的setter方法需返回this,否则对象属性可能未正确赋值;
    • 若字段有特殊命名,添加@JsonProperty注解指定JSON键名。

3. Jedis版本兼容性问题

部分旧版本Jedis对RedisJSON的命令支持存在缺陷,比如参数传递格式不匹配,导致Redis无法识别请求内容。

  • 解决办法:将Jedis依赖升级到最新稳定版本,确保与RedisJSON版本兼容。

4. 连接的Redis实例不符

即使ping()方法执行成功,也可能存在连接到了未加载RedisJSON模块的Redis实例(比如本地测试Redis和生产Redis混淆)。

  • 验证方法:在Redis客户端执行INFO modules,查看输出中是否包含ReJSON模块信息。

额外代码优化建议

可以显式指定JSON路径参数(.表示根路径),避免因参数缺失导致的问题:

public <T> void insertJson(String key, T object) {
    unifiedJedis.jsonSet(key, ".", object);
}

内容的提问来源于stack exchange,提问作者dev-rifaii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:16