繁体   English   中英

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

[英]Java 8 - working with JsonObject (javax.json) - how to determine if a node has child nodes?

我刚开始使用javax.json包。 我知道如果我知道我的JSON字符串的结构,如何从Java 8中的JSON对象中提取值。 但是我不知道字符串的结构怎么样? 问题:如何确定节点是否有子节点?

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

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

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

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

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

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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM