首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JSON 反序列化 Long 变 Integer 或 Double 问题

三、如何解决 3.1 慎对 Map 序列化 如工作中发送MQ 消息很多人图方便,不想定义POJO 对象,因为这样通常需要打包比较麻烦,就将要传输给其他系统的数据定义为 Map 类型,下游再根据 key...很容易造成上下游类型不一致,造成更换 JSON 反序列化工具出现故障。 因此发送 MQ 消息,最好给出相应的 POJO 类。...---- 实际工作中,还遇到有同学 Map 使用 JSON 序列化的方式存储到 Redis 中,然后反序列化后,原本 Long 类型的值,强转为 Long 导致线上出现BUG(前面讲到,这种情况下使用...fastjson ,如果值小于整数最大值,反序化为 Integer 类型,强转必然会报错)。...我个人不太建议这么做,因为这样不够通用,跨系统使用不太方便。 四、总结 希望大家能够【坚持做正确的事情】,而不是以是否【麻烦】作为是否采用某种策略的标准。

3.2K30
您找到你想要的搜索结果了吗?
是的
没有找到

Android之Google Gson介绍

image.png Gson GSON 是 Google 提供的用来 Java 对象和 JSON 数据之间进行映射的 Java 类库,可以快速的一个 Json 字符转成一个 Java 对象,或者一个...(Object src) 指定的对象序列化为其等效的Json表示形式,当指定的对象不是泛型类型,应使用此方法,如果对象是泛型类型,请改用 toJson(object,type)....JsonElement toJsonTree(Object src) 指定的对象序列化为 JsonElement 的等效表示形式,当指定的对象不是泛型类型,应使用此方法;如果对象是泛型类型,请改用{...(String json, Class classOfT) 指定的 Json 反序化为指定类的对象,如果指定的类是泛型类型,则使用 fromJson(String, Type)方法。...Json反序化为指定类的对象,如果指定的类是泛型类型,则调用 {@link#fromJson(Reader,type)} 实战使用 使用库的方法如下: 项目文件baiapp->build.gradle

1.3K10

Gson 系列文章

JSON 序列化和反序列化入门 Java-JSON 序列化基础 先来看一些序列化例子,Gson 中的序列化意味着 Java 对象映射成 JSON 数据格式,接下来的教程中,我们会逐步介绍一些复杂的情况...@SerializedName 匹配多个反序列化名称 我们介绍如何多个字段名称映射到一个字段属性上。...FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES 规则,修改生成的 JSON 中的字段名,格式全部变成小写,并且每个单词用“_” 分割。...反序列化 以上都是关于序列化的操作,统一以上的规则也使用JSON反序列化操作,如果你的服务器返回的 JSON 字段是以小写和下划线作为规则的话,就可以使用 LOWER_CASE_WITH_UNDERSCORES...默认的 Lenient 通常我们 Java 对象序列化成 JSON 格式的数据,并不会有什么太大的问题,此时的 JSON 将是一个标准的格式,重点是反序列化可能会有问题。

15.2K10

用了几年的 Fastjson,我最终替换成了Jackson!

library json-simple vs gson vs jackson vs json 功能特性支持、稳定性、可扩展性、易用性以及社区活跃度上 jackson 和 gson 差不多,入门教程可以分别参考...json字段名作为字面量缓存起来,即fieldName.intern() Feature.InternFieldNames 开启 - - jackson默认使用InternCache缓存了PropertyName...串的统一策略,如果要在一个json串中使用不同的策略则可以使用@JsonProperty.value()指定字段名 启用fastjson的autotype功能,即根据json字符串中的@type自动选择反序列化的类...ObjectMapper.disableDefaultTyping()设置为只允许@JsonTypeInfo生效 解析未用引号包含的json字段名作为String类型存储,否则只能用原始类型获取key...因此可以JSONObject类型改为Map,而JSONArray类型改为List。

4.7K10

除了FastJson,你还有选择: Gson简易指南

从描述可以看出,Gson 是用于 Java 对象与 JSON格式字符串数据相互转换的 Java 库。它起初Google 内部广泛使用在 Android 平台 和 Java 服务端上。...().create() 通常情况下,上面两种方式创建的 Gson 对象进行序列化与反序列操作时行为都是一样的,但是第二种方式构建 Gson 对象,允许进行额外的行为定制,比如格式化 JSON 字符串的输出内容...除了JSON 字符串序列化为自定义的Java 对象之外,我们该可以转为 Map 集合,Gson 提供了对 Map 集合的转换,使用起来也十分简单: @Test void test_map() {...比如现在有个 JSON 字符串内容为 {"CODE": 400, "MESSAGE": "参数错误"},需要被反序化为前文提到的 Result 对象,由于字段名不一样,为了实现对应的转换,就需要自定义...@SerializedName 指定了成员字段被序列化和反序列化时所采用的名称,便于我们调整JSON数据与对应实体类字段名不一致的问题,下面是具体使用方式: public class JSONFieldNamingSupportTest

1.3K30

用了几年的 Fastjson,最终替换成了 Jackson!

排名尚且不如 fastjson,也忽略,剩余 jackson2、gson 以及 org.json,其中 org.json使用量 (usage) 远小于 jackson2(方便起见,下文均以 jackson...json library json-simple vs gson vs jackson vs json 功能特性支持、稳定性、可扩展性、易用性以及社区活跃度上 jackson 和 gson 差不多,...fastjson Java Bean 序列化成 json 字符串通常也是使用com.alibaba.fastjson.JSON的静态方法 (JSONObject和JSONArray的静态方法也是来自于...@JSONCreator 指定反序列化时创建 java 对象使用的构造方法,对应 jackson 的@JsonCreator。 @JSONField 指定序列化和反序列化 field 的行为。...因此可以JSONObject类型改为Map,而JSONArray类型改为List。

2.1K30

序列化Java对象重命名字段,@JSONField、@JsonProperty、@SerializedName

、格式化的属性 @JSONField(serialize = false)---->序列化的时候忽略这个属性 @JSONField(format = "yyyyMMdd")---->序列化和反序列化额时候使用...yyyyMMdd,一般Date类型的字段上使用 */ @JSONField(serialize = false) public String Name; /* 注解set方法表示json...是com.fasterxml.jackson.annotation下使用频率很高的一个常用注解,用于json字符串中的某个字段和java对象中的某个属性进行匹配映射,同时可以java对象中的属性转换为指定字段的...下的常用注解,作用和@JsonProperty差不多,重点是可以多个字段名称映射到一个字段属性上 SerializedName 改变了默认序列化和默认反序列化的字段取值,所以,如果你使用 Gson...alternate 属性是用在反序列化上的,也就是说从 JSON 到 Java 类的过程。Gson 会帮我们匹配 JSON 中的命名,并尝试找到一个字段映射。无论哪一个都会映射。

9.9K20

除了FastJson,你还有选择: Gson简易指南

趁着周末,在家学习下同样具备JSON与对象转换功能的优秀开源框架 Gson,并且打算今后项目使用 fastjson 的地方逐渐换成使用 Gson,记录下学习总结的内容,希望对小伙伴也有所帮助。...从描述可以看出,Gson 是用于 Java 对象与 JSON格式字符串数据相互转换的 Java 库。它起初Google 内部广泛使用在 Android 平台 和 Java 服务端上。... 对象转化成 JSON字符串的过程称为序列化,JSON 字符串转化成对象的过程称为反序列化。...对象,允许进行额外的行为定制,比如格式化 JSON 字符串的输出内容,是否序列化 null 值等等。...比如现在有个 JSON 字符串内容为 {"CODE": 400, "MESSAGE": "参数错误"},需要被反序化为前文提到的 Result 对象,由于字段名不一样,为了实现对应的转换,就需要自定义

1.6K40

SpringBoot的序列化和反序列化

java.io.ObjectInputStream:表示对象输入流 ,它的readObject()方法源输入流中读取字节序 ,再把它们反序列化成为一个对象,并将其返回。...4、serialVersionUID 的作用 虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致,这个所谓的序列化ID,就是我们代码中定义的..., "course":["java","python"] } Spring Boot 中, 想要一个接口接收Json格式的数据并返回Json格式的数据,前端http请求头“Accept”设置为“...fjc.setFastJsonConfig(fj); converters.add(fjc); } } SerializerFeature配置属性的解释 属性名称 解释 QuoteFieldNames 输出key是否使用双引号...默认为false 配置前:默认不输出为null的字符型字段 配置后:字符类型字段如果为null,输出为”” 方式二 重写TypeAdapter 问题引入:使用GsonHashMap<String

2.1K40

Gson的学习与使用

Gson介绍: GSON是Google提供的用来Java对象和JSON数据之间进行映射的Java类库。可以一个Json字符转成一个Java对象,或者一个Java转化为Json字符串。...gson.toJson(map)); } } 结果: Gson提供了public T fromJson(String jsonStr,T.class)方法,可以json字符串转化为Java对象...反序列化指:json字符串转化成对象。 版本控制注解@Since(float v) 结合GsonBuilder().serVersion(n)使用。当n>=v,才会解析。...注:也是加在JavaBean属性上使用的。 版本控制注解@Util(float v) 与@Since相反,这次是n<v才能够解析。 使用TypeAdapter来实现序列化与反序列化。...: " + typeAdapter.toJson(p)); try { System.out.println("---->反序列化:是字符串转化为对象 : "

1.5K20

Gson - 两种字段,一种解析

需求 最近接入了两种只有一个字段名称不一致的json日志数据,因为数据存放在Kafka中,目的是留存成文件加载数据库,不假思索决定Flume来完成这个需求。...alternate是反序列化时没有value对应的字段名的时候的才会用到的备胎名集合 什么是序列化和反序列化?...json2 = gson.toJson(req2); 不难看出,value属性的inContent参与了序列化和反序列化,alternate里面的备胎outContent只参与了反序列化。...查找多处资料后,发现 alternate只有2.4版本之后才能使用 本地使用Gson2.8,并且依赖打进了jar包,但是flume中lib下居然有个gson-2.2.2.jar(奔溃中...)...,根据java的类加载原理,gson2.2加载之后就不会加载gson2.8中重复的class,删除了gson-2.2.2.jar之后,小手一阵敲打,jps -m | grep xxx | xargs

52920

穿越到东汉末年的Jackson

在这之后更是 破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江,横槊赋诗(对酒当歌,人生几何),固一世之雄也 蜀汉Gson Gson是一个Java库,可用于Java对象转换为其JSON表示形式...它也可以用于JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。...东吴FastJson fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。...包装意味着不是User序列化为以下内容: 它将像这样包装: image.png image.png @JsonSerialize @JsonSerialize表示在编组实体 使用的自定义序列化程序...让我们通过一个简单的例子来看看这个注解是如何工作的: image.png 这里我们有一个 POJO,我们想将带有fName、f_name和firstName 等值的JSON 反序列化到 POJO的firstName

1.9K20

巨坑系列:Java Bean 转 Map 的那些坑

反序列化了类型丢失 2.1.1 问题复现 Java Bean 转 Map 最常见的手段就是使用 JSON 框架,如 fastjson 、 gson、jackson 等。...但使用 JSON Java Bean 转 Map 会导致部分数据类型丢失。...如使用 fastjson ,当属性为 Long 类型但数字小于 Integer 最大值反序列成 Map 之后,变为 Integer 类型。 maven 依赖: <!...如当属性名叫 URL ,转为 Map 后 key 就会被解析成 uRL。 从这里看出,当属性名比较特殊也很容易出问题,但 dubbo 这个工具类符合我们的预期。...大家使用 JSON 框架和 Java Bean 转 Map 的框架要特别小心。 平时使用某些框架,多写一些 DEMO 进行验证,多读源码,多调试,少趟坑。 ----

94510

如何更好的使用Gson

今天想分享一些工作中遇到的关于gson的坑,这么说其实不太准确,因为不能算是gson的坑,更多的是因为旧代码产生了一些不规范的数据导致使用gson遇到了一些问题。...gson是Google开源的一个Java序列化库,它具有以下特点: 使用简单,只需要掌握toJson()和fromJson()两个方法就可以实现Java对象和JSON字符串之间的序列化和反序列化 允许现有的不可修改的对象与...POJO类(原谅我直接使用@Data)。...其中参数value就是传入的对象属性,我们判断它是null,就将其转化为空字符串。 写好Adapter类之后,我们新建gson的时候需要注册我们刚刚定义的Adapter。...数字和Boolean到底用哪个 我们开发过程中还遇到了这样一个问题,和另一个node写的服务做交互,我们发现,node服务返回给我们的JSON对应的Boolean类型字段的值是0或1。

1.1K20

Gson 解析 Json 容错才是关键,举几个常用的实例!

Gson是一个Java库,它不仅可以把Java对象转化为Json格式,它也能将一段Json格式的字符串转化为相对于的Java对象。...GSON JSON 序列化和反序列化之间,利用 @SerializedName 注解来配置多个不同 JSON Key 值,或者再使用 @Expose 来配置一些例外的情况。...复杂一些的数据,可以使用 TypeAdapter 来解决,TypeAdapter 可以说是一颗 GSON 解析 JSON 的银弹,所有复杂数据解析以及容错问题,都可以通过它来解决。...而 JsonSerializer 和 JsonDeserializer 是数据都读到内存中再进行操作,会比 TypeAdapter 费内存,但是 API 使用起来清晰一些。...到这一步就很灵活了,你可以直接用 Gson 数据反序列化成一个 List,也可以通过一个 for 循环将其中的每一项单独反序列化。

3K20

如何更好的使用Gson

今天想分享一些工作中遇到的关于gson的坑,这么说其实不太准确,因为不能算是gson的坑,更多的是因为旧代码产生了一些不规范的数据导致使用gson遇到了一些问题。...gson是Google开源的一个Java序列化库,它具有以下特点: 使用简单,只需要掌握toJson()和fromJson()两个方法就可以实现Java对象和JSON字符串之间的序列化和反序列化 允许现有的不可修改的对象与...POJO类(原谅我直接使用@Data)。...其中参数value就是传入的对象属性,我们判断它是null,就将其转化为空字符串。 写好Adapter类之后,我们新建gson的时候需要注册我们刚刚定义的Adapter。...数字和Boolean到底用哪个 我们开发过程中还遇到了这样一个问题,和另一个node写的服务做交互,我们发现,node服务返回给我们的JSON对应的Boolean类型字段的值是0或1。

1.5K00

这个坑,Java Bean 转 Map 要注意了

反序列化了类型丢失 2.1.1 问题复现 Java Bean 转 Map 最常见的手段就是使用 JSON 框架,如 fastjson 、 gson、jackson 等。...但使用 JSON Java Bean 转 Map 会导致部分数据类型丢失。...如使用 fastjson ,当属性为 Long 类型但数字小于 Integer 最大值反序列成 Map 之后,变为 Integer 类型。 maven 依赖: <!...如当属性名叫 URL ,转为 Map 后 key 就会被解析成 uRL。 image.png 从这里看出,当属性名比较特殊也很容易出问题,但 dubbo 这个工具类符合我们的预期。...大家使用 JSON 框架和 Java Bean 转 Map 的框架要特别小心。平时使用某些框架,多写一些 DEMO 进行验证,多读源码,多调试,少趟坑。

51520

springboot第42集:李佳琦说工作这么久了,还不懂Kafka吗?

当 Java 类的字段名JSON 数据中的字段名不一致使用 @JsonProperty 注解可以指定它们之间的对应关系。...这意味着当将该 Java 对象转换为 JSON 数据,将使用 "name" 作为字段名。...这个注解对于处理复杂的 JSON 数据结构或者需要在 Java 对象和 JSON 之间进行灵活映射的情况非常有用。它可以帮助确保序列化和反序列化过程中正确地匹配字段名称。...通常情况下,JSON 数据的键名与 Java 类的字段名是一致的,但有时候 JSON 数据的键名可能与 Java 类的字段名不匹配,或者希望序列化和反序列化过程中使用不同的名称。...这样,序列化( Java 对象转换为 JSON 数据)和反序列化( JSON 数据转换为 Java 对象)Gson 库会根据这些注解来正确地映射字段与键。

25320
领券