Java - Fastjson 序列化/反序列化之『科学计数法』解决方案

问题描述

这次是在 Kafka 消费者 @Payload 发现消息被反序列化的时候,浮点数类型,准确来说这里指的是 Double 类型,比如:123456792(1.23456792E8)

原因分析

经过排查发现,想直接解决 Kafka @Payload 根本问题还是比较难,如果有大佬发现可以评论哈~

所以只能在后面做数据加工处理,但也没那么简单,因为直接对 Double 可用的解决科学计数法没找到,只有 BIgDecimal 的。

解决方案

java 复制代码
/**
 * 处理 JSON 特性
 * - 科学计数法
 * @param object
 * @return
 */
public static Object evalJson(Object object) {
	String jsonString = JSON.toJSONString(object);
	JSONObject jsonObject = JSON.parseObject(jsonString);

    # 为什么要多做一次上面的序列化、反序列化呢? 因为先把 Double 类型转化为 BigDecimal 为下面可以利用 BigDecimal 特性做准备
	jsonString = JSON.toJSONString(jsonObject, SerializerFeature.WriteBigDecimalAsPlain);

	return JSON.parseObject(jsonString);
}

Ps:网上很多都是在啥实体类上加注解,那个当然可以理解,问题是 JSON 有时候面向更多的是临时动态对象,哪来的固定字段加呀~ 所以那些方法我就不重复轮子了,主要提供下针对全局解决这个问题的思路

相关推荐
Maiko Star19 分钟前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
现任明教教主~2 小时前
Thinkphp站群蜘蛛池SaaS系统YanyvSEO含多用户/积分/六大引擎计费/易支付对接
java·开发语言·spring
一条破秋裤3 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头3 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
摇滚侠4 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
二十雨辰4 小时前
[学成在线]-01项目背景
java
弈栈录5 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
落魄实习生5 小时前
Agent Scope Java 2.x 系列【2】 ReActAgent
java·开发语言
艸肅5 小时前
Ubuntu 安装 JDK (含手动安装)
java·ubuntu·jdk
m0_734172426 小时前
Python字典计数怎样处理首次出现的键
java