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

Gson正在为JSON中没有返回的字段重置值。变通方法?

在处理JSON数据时,如果某些字段在返回的JSON中没有出现,而你希望这些字段在解析后的对象中有一个默认值,可以使用Gson的@SerializedName注解和@Expose注解来实现。

首先,你可以在定义Java对象时,使用@SerializedName注解为字段指定一个默认的JSON字段名。然后,使用@Expose注解标记这个字段需要被Gson序列化和反序列化。

例如,假设你有一个Java对象User,其中包含nameage两个字段,但是在某些情况下,返回的JSON中可能没有age字段。你可以这样定义这个对象:

代码语言:java
复制
public class User {
    @SerializedName("name")
    @Expose
    private String name;

    @SerializedName("age")
    @Expose
    private int age = 0; // 设置默认值为0

    // 省略getter和setter方法
}

在这个例子中,如果返回的JSON中没有age字段,Gson会将age字段的值设置为默认值0。

另外,如果你希望在序列化对象时,忽略没有值的字段,可以使用GsonBuilder来创建Gson对象,并调用excludeFieldsWithoutExposeAnnotation()方法:

代码语言:java
复制
Gson gson = new GsonBuilder()
    .excludeFieldsWithoutExposeAnnotation()
    .create();

这样,没有使用@Expose注解的字段将不会被序列化。

总结一下,使用Gson处理JSON中没有返回的字段重置值的变通方法是:

  1. 在Java对象的字段上使用@SerializedName注解为字段指定默认的JSON字段名。
  2. 使用@Expose注解标记需要被Gson序列化和反序列化的字段。
  3. 如果希望忽略没有值的字段,在创建Gson对象时调用excludeFieldsWithoutExposeAnnotation()方法。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Gson 系列文章

,新 userAddress 字段没有直接,相反,它又包含了一个新子数据,被包含在一个 “{}” 。...直接,相反,JSON 通过 “[]” 来包含一个对象,如上所述,在 JSON 数据,数组和 List 结构是没有区别的。...Builder — 序列化空 序列化空 之前例子,空映射中,如果你数据结构没有字段赋值或者设置 null,序列化 JSON 是不会出现该字段。...Gson Builder — 特殊类型 Floats & Doubles 这两种类型是 Java 中常见类型,用来表示一些特定类型,但是在 JSON 没有这些类型。...此外,大多数 JavaScript 引擎将接受 JSON 这些特殊,而没有问题。 因此,在实际应用,即使不能作为 JSON 规范,但是接受这些作为有效 JSON 是有意义

15.2K10

Kotlin入门(31)JSON字符串解析

手工解析没有什么好办法,其实是有更高层次办法。...既然是自动解析,首先要制定一个规则,约定json串有哪些元素,具体对应怎样数据结构;其次还得有个自动解析工具,俗话说得好,没有金刚钻、不揽瓷器活。...对于捷径第一要素json数据结构定义,Kotlin特有的数据类正好派上用场了,字段名、字段类型、字段默认等色香味俱全,还有equals、copy、toString等下酒小菜,只要开发者轻拉珠帘便是一大桌满汉全席...:gson:2.8.2" 其次还要在kt源码文件头部添加如下一行导入语句,表示后面会用到Gson工具类: import com.google.gson.Gson 完成了以上两个步骤,然后就能在代码调用...Kotlin数据类定义代码尚且只有一行,这里json串自动解析仍旧只需一行代码,实实在在为开发者节省了不少功夫。

4K20

SpringBoot序列化和反序列化

以及参数,返回等诸多因子计算得出,极度复杂生成一个64位哈希字段。...5、SpringBoot序列化和反序列化 在项目开发,我们类并没有实现Serializable接口,实际上这是Spring框架帮我们做了一些事情,Spring并不是直接把User对象进行网络传输..., "course":["java","python"] } 在 Spring Boot , 想要一个接口接收Json格式数据并返回Json格式数据,前端将http请求头“Accept”设置为“...Json 格式数据,而@RestController注解包含了@ResponseBody 注解,所以默认情况下,@RestController即可将返回数据结构转换成Json格式。...String写入响应报文,当然,此时canWrite()方法返回true。

2.1K40

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

GSONJSON 序列化和反序列化之间,利用 @SerializedName 注解来配置多个不同 JSON Key ,或者再使用 @Expose 来配置一些例外情况。...// "languages":{} } 例子 JSON ,languages 字段表示当前用户所掌握语言。...当语言字段没有被设置时候,服务端返回数据不一致,如何兼容呢? 我们在原本 User 类,增加一个 languages 字段,类型为 ArrayList。...此时我们就想,要是可以直接在 SQLite 存储 languages 字段 JSON,将其当成一个字符串去存储,是不是就简单了?...小结时刻 针对服务端返回数据容错处理,很大一部分其实都是来自双端没有保证数据一致问题。

3K20

如何更好使用Gson

,前端同学需要根据有没有这个item来展示不同信息,如果有这个item,但是为空,那么前端就展示「不能告诉你」,如果没有这个item,前端同学就会展示为「没有这个item」。...数字和Boolean到底用哪个 我们在开发过程还遇到了这样一个问题,在和另一个node写服务做交互时,我们发现,node服务返回给我们JSON对应Boolean类型字段是0或1。...结果 错误信息写很清楚,我们isVip字段是一个Boolean类型,但是json却是数字类型,gson没办法识别了。 这时我们可以让node服务来修改,也可以选择自己做适配。...自己做适配的话,有两种方式,一种是把isVip字段改成Number类型,但是由于isVip只可能存在两种(是/否),用Number类型不是很合适。...扩展一点 细心同学一定注意到了JsonToken这个类了,这是gson对于Json符号类型定义。

1.1K20

如何更好使用Gson

,前端同学需要根据有没有这个item来展示不同信息,如果有这个item,但是为空,那么前端就展示「不能告诉你」,如果没有这个item,前端同学就会展示为「没有这个item」。...数字和Boolean到底用哪个 我们在开发过程还遇到了这样一个问题,在和另一个node写服务做交互时,我们发现,node服务返回给我们JSON对应Boolean类型字段是0或1。...@gmail.com", "isVip":1 } 那么我们在反序列化时就会报错 [报错信息] 错误信息写很清楚,我们isVip字段是一个Boolean类型,但是json却是数字类型,gson...自己做适配的话,有两种方式,一种是把isVip字段改成Number类型,但是由于isVip只可能存在两种(是/否),用Number类型不是很合适。...扩展一点 细心同学一定注意到了JsonToken这个类了,这是gson对于Json符号类型定义。

1.5K00

Android Study 之 彻底解决 Gson解析 异常 :JsonSyntaxException

前言 开发过程,App常用接收参数时候,几乎大部分都是以json格式为主,那么有关解析json方式有很多,Android端相对来说使用Gson比较多,而在解析过程,如果你遇到规范后台,那你大可放心随便浪...可是在解析过程,GG了。。。 趟坑路,超神路 满怀信心撸码,运行,app却提示了如下类型错误: com.google.gson.JsonSyntaxException 上来一看,Json格式错误?...回头再仔细看下返回Json。 有的为null,有的为“” 重点结合度娘意见以及重新回顾Json串时,确定了是由于后台接口参数返回不规范(也就是设计不合理)导致解析失败。 ? 那么怎么解决呢?...其实说白了,就是在转化解析过程对后台返回Json不合法属性字段进行有效处理即可。具体直接看下面工具类即可。...double dbNum = in.nextDouble(); // 数字超过long最大返回浮点类型 if (dbNum

4.3K10

Android 序列化框架 Gson 原理分析,可以优化吗?

默认会过滤空) .serializeNulls() // 启用 Json 格式化 .setPrettyPrinting() .create(); 1.2 注解配置 Gson...在序列化时,首先使用反射获取字段,再使用字段 BoundFiled 序列化; 在反序列化时,首先创建对象实例(下文会讨论如何创建),再使用依次使用字段 BoundField 反序列为字段类型,...由于字段写入和读取是通过 Field 元数据反射操作,所以 private 字段也可以操作。...这个 API 不会调用构造函数,因此相关构造初始化操作会丢失; 1、构造函数参数默认丢失; 2、字段默认丢失; 3、Kotlin 非空类型失效; 4、初始化块未执行; 5、by 属性代理(没有创建代理对象...原理是 Class 文件 Signature 属性会保持类签名信息,而 TypeToken 只是一个工具类,内部通过反射获取类签名泛型信息并返回 Type 类型。

2.1K50

Gson 解析 Json 容错策略

{ "name":"承香墨影", "age":18 // "age":"18" } 那假如服务端说,这个用户没有填年龄信息,所以直接返回了一个空串 "",那这个时候客户端用 Gson 解析就悲剧了...":{} } 例子 JSON ,languages 字段表示当前用户所掌握语言。...当语言字段没有被设置时候,服务端返回数据不一致,如何兼容呢? 我们在原本 User 类,增加一个 languages 字段,类型为 ArrayList。...此时我们就想,要是可以直接在 SQLite 存储 languages 字段 JSON,将其当成一个字符串去存储,是不是就简单了?...小结时刻 针对服务端返回数据容错处理,很大一部分其实都是来自双端没有保证数据一致问题。

1.2K41

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

this.Name = Name; } /* 注解在get方法表示bean转换成json时候会把实体类Name属性赋给jsonName */ @JSONField(name="Name...是com.fasterxml.jackson.annotation下使用频率很高一个常用注解,用于将json字符串某个字段和java对象某个属性进行匹配映射,同时可以将java对象属性转换为指定字段...下常用注解,作用和@JsonProperty差不多,重点是可以将多个字段名称映射到一个字段属性上 SerializedName 改变了默认序列化和默认反序列化字段取值,所以,如果你使用 Gson...将 Java model 类生称 JSON 串,结果就是 value 名称就是字段名称。...alternate 属性是用在反序列化上,也就是说从 JSON 到 Java 类过程。Gson 会帮我们匹配 JSON 命名,并尝试找到一个字段映射。无论哪一个都会映射。

10K20

Gson】【3】实例演习

整数或浮点数); 字符串(在双引号); 逻辑(true或false); 数组(在方括号); 对象(在花括号); null 二、实例演习: 实例1:在查询告警窗口中对告警流水号为2012记录做“...gson = newGson(); String jsonCond= gson.toJson(condition); 实例3:若实例2对流水号2012和2013两条记录“清除”成功后,服务端返回结果为...把Java对象转换为此Json对象,但要求Java属性字段定义为是“驼峰”风格。...2、为使Java属性字段定义和显示为不同Gson提供了@SerializedName注释,见演示代码2....2、定义属性字段为CmdCode、Limit、VersionID和SortCond类,但SortCond与其它字段不同之处在于SortCond是一个集合,这个集合对象类型必须能够描述出按“网元发生时间

87910

记一次SpringHttpMessageConverter源码分析

最近在使用Spring时遇到一个关于JSON解析问题,@Response接口如果返回为一个Interfacce那么结果将变为空对象,也就是{},记录一下,防止再次踩坑。...当然是首先怀疑是不是代码出错导致JSON返回了空对象,于是我直接debug了一下controller代码,直接call到返回那一行,发现返回到响应时还是正常,可以确定代码是没有问题,排除。...这里调用了GsontoJson方法,并且传入了源对象,对象Type类型,以及一个输出流,这里需要注意是传入Type类型是返回类型也就是一个接口,这样做有什么后果呢?...Adapter对象,但是来再看getBoundFields方法 我们看到这里会判断type如果是一个接口便不会往下执行了,也就是说这个Adapter字段列表将是空,空对象生成出来Json是{}也就是必然结果了...~ 分析完毕,一开始我以为是GsonBUG,后来慢慢分析发现这是SpringGsonHttpMessageConverter 实现类 BUG....

59230

人生苦短,我用Gson

JSON 键值对是用来保存JS对象一种方式,和JS对象写法也大同小异,键/对组合键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着,如下例子所示: {“firstName”:...,但实际,有时我们并不需要全部字段序列化。...或者随着项目的发展,版本可能会升级,某些实体类里可能会新增几个字段,这时版本不同数据不同,即低版本不能解析新json数据(因为新数据还有新增字段)等。...,由于Map字段声明类型是Object,最终Gson会定位到内置ObjectTypeAdaptor类,我们来分析一下该类逻辑过程。...对应是Object类型,最终会解析为Map 类型;其中Object类型跟Json具体有关,比如双引号””翻译为STRING。

2.1K50

采用Gson解析含有多种JsonObject复杂json

但是对于比较复杂 json,比如下面这种, attributes 对应 jsonObject 字段是完全不一样,这个时候再简单用上面的方法就解析不了了。 ?...Ⅲ.JsonPrimitive 这个可以认为是json原始类型,包含Java8个基本类型和它们对应包装类型,也包含 String 类型。...Ⅱ.如果在解析过程中发现有些类型没有注册到 MultiTypeJsonParser Builder ,解析时候碰到相应 jsonObject 就直接返回null。...比如下面这样json,"type" 对应 "parents" 如果没有注册,那么反序列化时候这个 json 所代表对象就为 null 。 ?...在Android我们反序列这样 json 后一般会把得到对象设置到列表控件上,如果后端返回 json 包含之前未注册类型,为了程序不至于 crash,需要对反序列化 null 对象进行过滤

2.2K20

【Java 进阶篇】Java HTTP响应消息详解

响应体(Body):包含了实际响应数据,可以是HTML页面、JSON数据、文本等。响应体格式由Content-Type头部字段指定。 下面我们将详细介绍每个部分。...表示服务器成功处理了请求,但没有返回任何内容。 400 Bad Request:坏请求。表示客户端发送了一个无效请求。 401 Unauthorized:未授权。...以下是一些常见Content-Type: text/html:HTML文档。 application/jsonJSON数据。 text/plain:纯文本。...读取响应体:通过getInputStream()或getReader()方法获取响应体,然后根据Content-Type头部字段解析响应数据。...如果响应状态码是200,表示请求成功,我们读取响应数据,然后使用Gson库解析JSON响应数据为一个DataObject对象。 这只是一个简单示例,实际应用可能需要更复杂处理和错误处理。

36220
领券