java redis 拿取JSON数组被解析成了LinkedHashMap
时间: 2024-10-16 09:07:57 浏览: 47
springboot分布式自增id_javaredis_源码
当你在 Java 中使用 Redis 存储 JSON 数组,并尝试将其转换为 List 或者其他的 Java 对象时,Redis 自身并不直接支持 JSON 的序列化和反序列化,而是将数据存储为字节串。如果你没有设置合适的序列化策略(例如Jackson、Gson等库),默认情况下,RedisTemplate 或 Jedis 将会使用 `JdkSerializationRedisSerializer` 进行序列化和反序列化。
当从 Redis 获取到的数据被反序列化成 `LinkedHashMap`,这是因为 `LinkedHashMap` 是 Java 中的一个内置类,它在遇到无法识别为其他特定类型的数据时,会尝试将其作为 Map 来处理。在这种情况下,它可能会将 JSON 数组的第一个元素视为 key,其余元素视为 value 对,形成类似键值对的形式。
解决这个问题通常需要在序列化时指定正确的策略,比如:
1. 使用如 Jackson 或 Gson 的 JSON 库进行序列化和反序列化,它们可以更好地处理 JSON 数据并转化为对应的 Java 类型。
```java
String json = jedis.get("key");
ObjectMapper mapper = new ObjectMapper();
List<MyJsonObject> jsonArray = mapper.readValue(json, new TypeReference<List<MyJsonObject>>() {});
```
2. 如果你需要保持原始 JSON 数组结构,可以考虑使用 `List<String>` 或者 `byte[][]` 来存储,然后自行解析。
阅读全文