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

Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal

Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal

  • 小坑规避指南

小坑规避指南

项目中遇到json格式转换成Map,已经定义了Map的key和value的类型,但是在遍历Map取值的时候出现了类型转换的报错问题(java.lang.Integer cannot be cast to java.math.BigDecimal)
1、原来的代码

BigDecimal monthTotal = new BigDecimal("0");
        String yearMonth = "2025-01";
        String str="{\"2025-01-02\":22520770,\"2025-01-03\":23733.9675}" ;
        Map<String, BigDecimal> dayMap = JSONObject.parseObject(str, Map.class);
        for (Map.Entry<String, BigDecimal> entry : dayMap.entrySet()) {
            if(entry.getKey().startsWith(yearMonth)){
                monthTotal = monthTotal.add(entry.getValue());
            }
        }

上面的代码在monthTotal = monthTotal.add(entry.getValue()); 执行这行会报错,后面调试发现,你定义的Map<String, BigDecimal> 转换出来的不一定就是这个类型的
在这里插入图片描述
其中有两种类型的数据,所以取出来就会类型转换错误了!

所以为了避免踩这种坑,建议写法:

Map<String, BigDecimal> dayMap = JSONObject.parseObject(str, new TypeReference<Map<String, BigDecimal>>(){});

把Map.class改成new TypeReference<Map<String, BigDecimal>>(){}就可以了,这样就会转换成指定的键值对数据类型。


http://www.kler.cn/a/509961.html

相关文章:

  • 无人机(Unmanned Aerial Vehicle, UAV)路径规划介绍
  • 【Linux系统编程】—— 深入理解Linux中的环境变量与程序地址空间
  • 【王树森搜索引擎技术】概要01:搜索引擎的基本概念
  • 改进果蝇优化算法之一:自适应缩小步长的果蝇优化算法(ASFOA)
  • 在Playwright中使用PO模式
  • Vue篇-07
  • 记录一次关于spring映射postgresql的jsonb类型的转化器事故,并使用hutool的JSONArray完成映射
  • Leetcode - 周赛432
  • leetcode34-排序数组中查找数组的第一个和最后一个位置
  • Learning Prompt
  • Kubernetes (K8s) 权限管理指南
  • 【Linux】15.Linux进程概念(4)
  • linux 安装jdk1.8
  • 【脑机接口数据处理】bdf文件转化mat文件
  • AI Prompt 设计指南:从基础构建到高质量生成的全面解析
  • h5使用video播放时关掉vant弹窗视频声音还在后台播放
  • Centos7将/dev/mapper/centos-home磁盘空间转移到/dev/mapper/centos-root
  • 分布式CAP理论介绍
  • Dart语言
  • 计算机视觉语义分割——U-Net(Convolutional Networks for Biomedical Image Segmentation)
  • 【视觉惯性SLAM:十六、 ORB-SLAM3 中的多地图系统】
  • 深入探索Go语言中的临时对象池:sync.Pool
  • Vue2.0的安装
  • K210视觉识别模块
  • 向harbor中上传镜像(向harbor上传image)
  • 模块化架构与微服务架构,哪种更适合桌面软件开发?