Jackson是SpringBoot中集成的一个json工具
需要反序列化的json字符串
{
"expireTime": "2025-03-28T10:45:42.129",
"data": {
"id": 1,
"name": "101茶餐厅",
"typeId": 1,
"images": "https://qcloud.dpfile.com/pc/jiclIsCKmOI2arxKN1Uf0Hx3PucIJH8q0QSz-Z8llzcN56-_QiKuOvyio1OOxsRtFoXqu0G3iT2T27qat3WhLVEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vfCF2ubeXzk49OsGrXt_KYDCngOyCwZK-s3fqawWswzk.jpg,https://qcloud.dpfile.com/pc/IOf6VX3qaBgFXFVgp75w-KKJmWZjFc8GXDU8g9bQC6YGCpAmG00QbfT4vCCBj7njuzFvxlbkWx5uwqY2qcjixFEuLYk00OmSS1IdNpm8K8sG4JN9RIm2mTKcbLtc2o2vmIU_8ZGOT1OjpJmLxG6urQ.jpg",
"area": "大关",
"address": "金华路锦昌文华苑29号",
"x": 120.149192,
"y": 30.316078,
"avgPrice": 80,
"sold": 4215,
"comments": 3035,
"score": 37,
"openHours": "10:00-22:00",
"createTime": "2021-12-22T18:10:39",
"updateTime": "2022-01-13T17:32:19"
}
}
实现代码
import com.fasterxml.jackson.databind.ObjectMapper;// 注意包名
@Autowired
private ObjectMapper mapper; // 在SpringBoot环境中可以使用依赖注入, 自己new也可以
RedisData redisData = mapper.readValue(shopJson, RedisData.class);// 反序列化为第一层对象
Object data = redisData.getData();
Shop shop = mapper.convertValue(data, Shop.class);// 反序列化为第二层对象
两次反序列化不同的是第一次是根据json字符串, 第二次是根据Object对象(实际为LinkedHashMap)
相关实体类
@Data
public class RedisData {
private LocalDateTime expireTime;
private Object data;
}
可以看到data实际的类型为LinkedHashMap, 可以使用mapper.convertValue()直接将data再次反序列化为Shop, 只需要传入data和Shop的.class字节码文件对象
如有不对的地方还请指正~