我想将包含另一个空值POJO的POJO序列化为JSON。
例如,给定:
class School {
String name;
Room room;
}
class Room {
String name;
}
Room room = new Room();
School school = new School("name");
school.room = room;
连载之后,它看起来会是这样的
{“name”:“name”,“room”:{}}
如果类的所有字段也为空,是否可以排除空对象{}
?理想情况下,全局适用于每个对象,而无需编写自定义代码。
添加@Json包括(Include.NON_EMPTY)删除空对象:
@JsonInclude(Include.NON_EMPTY)
class School {
指示仅包含具有非空值的属性的值。
TLDR:你想要的行为不会起作用,因为对象已经被实例化,需要为空。
Include.NON_EMPTY
Include.NON_NULL
这些选项不适用于您尝试执行的操作的原因是,您已经html" target="_blank">实例化了Room类型的Object,因此Room不是空的或null,因此您的输出:{“name”:“name”,“Room”:{}}
如果您确实想避免在JSON中表示空间,那么对象需要为空。通过设置< code>school.room = null,您将得到您想要的输出,尽管在现实世界中这可能会变得混乱,因为在将school中的room设置为null之前,您必须评估对象中的字段是否真的为null。
自定义序列化程序可以更好地处理这个问题,请参见:不要将空对象包含到Jackson
有点晚了,添加Json包括自定义
class School {
String name;
@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = Room .class)
Room room;
}
@EqualsAndHashCode
class Room {
String name;
}
这将避免在等于新 Room()
时包含空间。不要忘记在 Room 类中实现 equals 方法并包含一个空构造函数
此外,您可以使用< code>@JsonInclude( Include。NON_EMPTY )或< code>@JsonInclude( Include。NON_DEFAULT )来跳过可能的空值或空值
如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局地用于每个对象,而无需编写自定义代码。
问题内容: 我目前正在使用杰克逊2.1.4,并且在将对象转换为JSON字符串时忽略字段时遇到了一些麻烦。 这是我的类,它充当要转换的对象: 这是我如何转换它: 这是输出: 如何避免这些空值?我只想获取“订阅”目的所需的信息! 这正是我要查找的输出: 我还尝试了@JsonInclude(Include.NON_NULL)并将所有变量都设置为null,但是它也不起作用!感谢您的帮助! 问题答案: 您将
下面是我的类,它充当要转换的对象: 下面是我的转换方法: 输出如下: 下面正是我要查找的输出: 我还尝试了@jsonInclude(include.non_null),并将我的所有变量置为null,但也没有起作用!谢谢你们的帮助!
如何使Gson正确序列化我的密钥?
问题内容: 我使用以下代码来序列化从外部服务获得的响应,并作为我的服务的一部分返回json响应。但是,当外部服务返回带有时区(10:30:00.000-05.00)的时间值时,杰克逊会将其转换为15:30:00。如何忽略时区值? 问题答案: 您可以创建自定义解串器 告诉杰克逊使用您的自定义解串器 并像这样使用它: 您可以使用Jackson自定义序列化为服务响应添加时区信息
我有一个这样的对象: 我是否可以使用和我的条件来仅在不为负数的情况下包含该值?或者有没有其他的解决办法我可以做到这一点?