使用Jackson进行嵌套json内层对象的反序列化

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字节码文件对象 

如有不对的地方还请指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值