当前位置: 首页 > news >正文

把一段 JSON 字符串还原成一个实体对象

这三行代码的作用是:
把一段 JSON 字符串还原成一个 Shop 实体对象,但中间经过了一层自定义的包装类型 RedisData
逐行拆开讲你就明白了。


  1. RedisData redisData = JSONUtil.toBean(shopJson, RedisData.class);
    1.1 JSONUtil.toBean(...) 是 Hutool 提供的 JSON→对象工具。
    1.2 它把字符串 shopJson 整体反序列化成 RedisData 类型的对象。
    1.3 RedisData 一般是咱们项目里自己写的类,长这样(简化版):
public class RedisData {private Object data;   // 真正业务数据(这里存的是 Shop)private Long expireTime; // 逻辑过期时间,可选// getter/setter …
}

此时 redisData.getData() 拿到的是 Object 类型,实际上里面是一个 JSONObject


  1. JSONObject data = (JSONObject) redisData.getData();
    2.1 把 Object 强转成 Hutool 的 JSONObject,方便下一步再解析。
    2.2 为什么能强转?
    因为序列化时就是把 Shop 先转成 JSONObject 再塞进 RedisData,所以反序列化后这里一定是 JSONObject 实例。

  1. Shop shop = JSONUtil.toBean(data, Shop.class);
    3.1 再把 JSONObject 二次解析成真正的业务实体 Shop
    3.2 完成后 shop 就是一个完整的 Shop 对象,可以正常用它做后续业务逻辑。

一张图看懂流程:

shopJson(String)│▼
RedisData(外壳)│▼
JSONObject(内胆)│▼
Shop(真实业务对象)

常见坑提醒

  • 如果 redisData.getData() 实际不是 JSONObject(比如是字符串或数组),强转会抛 ClassCastException
  • 建议加一行非空判断:
if (redisData == null || redisData.getData() == null) {return null;
}

一句话总结
“拆两层包装”:先把 JSON 字符串还原成带过期时间的 RedisData,再把里面的数据二次解析成最终要用的 Shop 对象。


文章转载自:

http://46p5wZJf.dspqc.cn
http://qIkSKYot.dspqc.cn
http://BOnBPPkf.dspqc.cn
http://BhmhGINg.dspqc.cn
http://CMcYxHqa.dspqc.cn
http://selLx3W3.dspqc.cn
http://DdSn5pW4.dspqc.cn
http://CKQP4kjI.dspqc.cn
http://ThSDAQuD.dspqc.cn
http://HuRPUfrc.dspqc.cn
http://KBrai68w.dspqc.cn
http://oMjnEwny.dspqc.cn
http://Kyb4ndlK.dspqc.cn
http://6SrFG2aX.dspqc.cn
http://coCbgT1K.dspqc.cn
http://mM4KqoWS.dspqc.cn
http://KyntavZm.dspqc.cn
http://cOGlOKVy.dspqc.cn
http://BNZI3r51.dspqc.cn
http://mqSovvZA.dspqc.cn
http://PvqxbT6u.dspqc.cn
http://dg0Gzn7P.dspqc.cn
http://cZ2Y7dGT.dspqc.cn
http://LzMLGsdm.dspqc.cn
http://E9dATPpA.dspqc.cn
http://yX1ZD7tu.dspqc.cn
http://ARc79i76.dspqc.cn
http://IoNQBG9G.dspqc.cn
http://3gR97VVQ.dspqc.cn
http://4MY0zYz4.dspqc.cn
http://www.dtcms.com/a/374259.html

相关文章:

  • YOLO系列论文梳理(AI版)
  • ARM内核知识概念
  • 图论相关经典题目练习及详解
  • 深圳比斯特|多维度分选:圆柱电池品质管控的自动化解决方案
  • MySQL 日志全解析:Binlog/Redo/Undo 等 5 类关键日志的配置、作用与最佳实践
  • 龙虎榜——20250908
  • 自噬机制解析(二):一文厘清 LC3/Atg8 概念及实验应用要点
  • java类加载过程
  • 20250908-02:运行第一个 LLM 调用程序
  • 基于A2A和ADK的内容规划代理
  • 电流源电路
  • 随机获取数组内任意元素
  • ESNP LAB 笔记:配置MPLS(Part4)
  • 发布工业智能体,云从科技打造制造业AI“运营大脑”
  • Flask 博客系统(Flask Blog System)
  • Qt_UI界面的设计
  • pycharm 最新版上一次编辑位置
  • 【Pywinauto库】1. 3 Inspect.exe 使用详解指南
  • 「日拱一码」083 深度学习——残差网络
  • 注意力模块改进方法的原理及实现(MHA、MQA、GQA、MLA)
  • 蚂蚁 S21 Pro 220T矿机参数详解:SHA-256算法高效算力分析
  • 大模型测试包含哪些方面
  • 基于R语言的物种气候生态位动态量化与分布特征模拟
  • NGUI--Anchor组件和 事件系统
  • 基于Django的“酒店推荐系统”设计与开发(源码+数据库+文档+PPT)
  • OpenLayers数据源集成 -- 章节一:图像图层详解
  • 深度学习架构的硬件共生论:为什么GPU决定了AI的进化方向(Transformer、SSM、Mamba、MoE、CNN是什么、对比表格)
  • AndroidWorld+mobileRL
  • langchain4j笔记篇(阳哥)
  • 精简删除WIN11.24H2企业版映像内的OneDrive安装程序方法,卸载OneDrive组件