java中是否有检查任何json属性是否为空的函数?

java中是否有检查任何json属性是否为空的函数?,java,json,null,gson,Java,Json,Null,Gson,我有一条JSON格式的消息,我将其转换为JSONObject,我有大约30个必填字段,我必须检查它们是否为null。如果其中一个必填字段为空,我将丢弃消息,但是其他字段可以为空,而无需丢弃消息。有没有什么有效的方法可以做到这一点,而不必遍历每个字段并使用isNull 此外,JSON对象是嵌套的,因此简单的anyNull函数不起作用,因为它仅在对象本身为null时返回,而在变量本身为null时不返回 我尝试使用gson将消息转换为POJO,并为10个对象创建了类 Gson gson = new G

我有一条JSON格式的消息,我将其转换为JSONObject,我有大约30个必填字段,我必须检查它们是否为null。如果其中一个必填字段为空,我将丢弃消息,但是其他字段可以为空,而无需丢弃消息。有没有什么有效的方法可以做到这一点,而不必遍历每个字段并使用isNull

此外,JSON对象是嵌套的,因此简单的anyNull函数不起作用,因为它仅在对象本身为null时返回,而在变量本身为null时不返回

我尝试使用gson将消息转换为POJO,并为10个对象创建了类

Gson gson = new Gson();
Message message = gson.fromJson(msg, Message.class);

但是,由于许多类都是嵌套的,其中一个类是使用简单的空检查的对象数组,因此不起作用。

实际上,您的问题不是很清楚,因为您使用的是一个消息词,它引用了您的特定类,但也可以更一般地引用发送/接收的消息

对于内存中的JSON元素:

公共静态无效FailonNullRecursiveyFinal JsonElement JsonElement{ 如果jsonElement.isJsonNull{ 抛出新的IllegalArgumentExceptionnull!; } 如果jsonElement.isJsonPrimitive{ 回来 } 如果jsonElement.isJsonArray{ 对于最终的JsonElement元素:JsonElement.getAsJsonArray{ failOnNullRecursivelyelement; } 回来 } 如果jsonElement.isJsonObject{ 用于最终映射。条目e:jsonElement.getAsJsonObject.entrySet{ failOnNullRecursivelye.getValue; } 回来 } 抛出新的AssertionErrorjsonElement; } 或流中的JSON文档:

公共最终类FailOnNullJsonReader 扩展JsonReader{ 专用FailOnNullJsonReaderfinal读取器{ 超级阅读器; } 公共静态JsonReader createfinal读取器{ 返回新的FailOnNullJsonReaderreader; } @凌驾 下一次公开无效{ 在%@!处抛出新的IllegalStateExceptionString.formatnull,getPath; } } 它们都将抛出空值。但您似乎也想验证消息实例:

如果其中一个必填字段为空,我将丢弃消息,但是其他字段可以为空,而无需丢弃消息

这就说明了为什么上面的空检查不能满足您的需要。你要找的是。如果消息实例被反序列化,验证也需要时间和资源,但从编码的角度来看,它可能会很有效:

最终设置冲突=validator.validatemessage; 如果我是空的{ 抛出新的ConstraintViolationException违规; } 甚至可以将其直接集成到Gson中,以便为中间件服务:

公共最终类PostReadTypeAdapterFactory 实现TypeAdapterFactory{ 私有最终谓词>支持; 私人最终双消费者