我有一个JSON
的消息,我将其转换为JSONObject
,并且我有大约30个必填字段,我必须检查它们是否为空。如果其中一个必填字段为空,我将丢弃该消息,但是其他字段可以为空而无需丢弃该消息。有没有一种高效的方法可以做到这一点,而不必遍历每个字段并使用isNull()
?
此外,JSON对象是嵌套的,因此简单的anyNull()
函数将不起作用,因为它只在对象本身为空时返回,而在变量本身为空时不返回。
我尝试使用gson将消息转换为POJO,并为10个对象创建了类
Gson gson = new Gson();
Message message = gson.fromJson(msg, Message.class);
但由于许多类是嵌套的(其中一个类是对象数组),因此使用简单的空检查器是行不通的。
1条答案
按热度按时间zzlelutf1#
实际上,说你的问题并不是很清楚,因为你使用的“消息”一词指的是你的特定类,但也可以是更通用的,指的是发送/接收的消息。
内存中的JSON元素:
或JSON文档:
它们都将在
null
上抛出。但是,您似乎还希望验证Message
示例:如果其中一个必填字段为空,我将丢弃该消息,但是其他字段可以为空,而无需丢弃该消息。
这就说明了为什么上面的空值检查不能满足你的需要。你要找的是JSR-303。它可能没有你希望的那么高效(消息示例是反序列化的,验证也需要时间和资源),但是从编码的Angular 来看,它可能是高效的:
或者甚至将其集成到Gson中,以便为中间件提供服务:
第一个
和测试(使用Lombok岛为简洁):
第一个
最后,可能是最有效的(就阅读JSON流而言),但与JSR-303相比非常有限(并且不在Gson中工作,因为Gson不将空值检查传播到下游(反)序列化程序),可以用类似的“功能性”注解替换
@NotNull
的方法:第一个
第三个,JSR-303,看起来最适合你。