Java 8 - 使用 JsonObject (javax.json) - 如何确定一个节点是否有子节点?

标签 java json java-8

我刚刚开始使用 javax.json 包。如果我知道我的 JSON 字符串的结构,我就知道如何从 Java 8 中的 JSON 对象中提取值。但是我不知道其结构的字符串呢?问题:如何判断一个节点是否有子节点?

要读取值,我只需要使用“get*”方法——它工作正常,但是没有像“checkIfArray”或“checkIfObject”这样的方法来检查我是否可以使用像“getString”这样的方法...

最佳答案

javax.json包,两种可用类型都支持空检查,因为它们都实现了 java.collection接口(interface):

JsonObject是一个java.util.Map<String, JsonValue> .因此,可以通过简单地调用 isEmpty() 来检查此类对象是否包含任何值。方法。

JsonArray是一个java.util.List<JsonValue> .因此,可以再次通过调用 isEmpty() 检查数组是否为空。方法。

用于遍历 JsonStructure 的树s 在标记所有空节点时,您可以使用此辅助方法:

boolean isValueEmpty(JsonValue v) {
  if (v == null) {
    return true; // or you may throw an exception, for example
  }
  switch(v.getValueType()) {
    case NULL:
      return true; // same as with Java null, we assume that it is Empty
    case ARRAY: 
      return ((JsonArray) v).isEmpty();
      // additionally, you can say that empty array is array with only empty elements
      // this means a check like this:
      // return ((JsonArray v).stream().allMatch(isValueEmpty); // recurse
    case OBJECT:
      return ((JsonObject v).isEmpty();
    case STRING:
      // optionally: if you want to treat '' as empty
      return ((JsonString v).getString().isEmpty();
    default:
      return false; // to my knowledge, no other Json types can be empty
  }
}

关于Java 8 - 使用 JsonObject (javax.json) - 如何确定一个节点是否有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43045442/

相关文章:

ios - Swift:REST JSON Get 请求带身份验证

json - 获取 null,$sum 聚合 - Mongo

java - 流和功能接口(interface): throw exception inside stream and aggregate them

java - 有 Java Platform SE 8 所有类的类图吗?

java - Grails3 单元测试不适用于 Multi-Tenancy

java - 将 XML 映射到与 XML 结构不匹配的 Java 对象

java - JVM 中的确定性垃圾回收

java - 如何在JAVA中连接MySQL和PostgreSQL的Azure数据库

java - 如何聚合循环中进行 CompletableFuture 调用的结果?

c# - 如何使用 Json.NET 将 IHtmlString 序列化为 JSON?