【问题标题】:How to test if JSON Collection object is empty in Java如何在 Java 中测试 JSON Collection 对象是否为空
【发布时间】:2013-10-10 19:25:32
【问题描述】:

我收到的 JSON 集合对象如下所示:

[{"foo1":"bar1", "foo2":"bar2", "problemkey": "problemvalue"}]

我要测试的是problemvalue 的存在。如果problemvalue 返回一个 JSON 对象,我很高兴。如果没有,它将返回为{}。我如何测试这种情况?试了好几样都没用。

这是我迄今为止尝试过的:

//      if (obj.get("dps") == null) {  //didn't work
//      if (obj.get("dps").equals("{}")) {  //didn't work
if (obj.isNull("dps")) {  //didn't work
    System.out.println("No dps key");
}

因为{"dps":{}},我预计其中一行会打印“No dps key”,但无论出于何种原因,它都不是。我正在使用org.json。 jar 文件为org.json-20120521.jar。

【问题讨论】:

    标签: java json


    【解决方案1】:
    if (jsonObj != null && jsonObj.length > 0)
    

    检查 JSONObject 中的嵌套 JSON 对象是否为空:

    if (!jsonObject.isNull("key") && jsonObject.getJSONObject("key").length() > 0)
    

    【讨论】:

    【解决方案2】:

    对于这种情况,我会这样做:

    var obj = {};
    
    if(Object.keys(obj).length == 0){
            console.log("The obj is null")
    }

    【讨论】:

      【解决方案3】:

      如果要检查json空大小写,我们可以直接使用下面的代码

      String jsonString = {};
      JSONObject jsonObject = new JSONObject(jsonString);
      if(jsonObject.isEmpty()){
       System.out.println("json is empty");
      } else{
       System.out.println("json is not empty");
      }
      

      这可能会对你有所帮助。

      【讨论】:

        【解决方案4】:

        如果为空数组:

        .size() == 0
        

        如果是空对象:

        .length() == 0
        

        【讨论】:

          【解决方案5】:

          如果你对 hack 没问题 -

          obj.toString().equals("{}");
          

          序列化对象是昂贵的,而且对于大型对象来说更是如此,但最好理解 JSON 作为字符串是透明的,因此查看字符串表示是解决问题的方法。

          【讨论】:

          • 最佳答案
          • 它增加了计算和cpu负载,不是很好的方法。
          • @HamidAraghi 不是真的,底层表示已经是带有String 键的HashMap,因此转换非常迅速。如果对于非常大的 JSON 对象有必要,“更快”的方法是比较 length(),如其他答案中所示。但即使在这种情况下,这种方法也不会很慢。
          【解决方案6】:
          @Test
          public void emptyJsonParseTest() {
              JsonNode emptyJsonNode = new ObjectMapper().createObjectNode();
              Assert.assertTrue(emptyJsonNode.asText().isEmpty());
          }
          

          【讨论】:

            【解决方案7】:

            如果 Records 是 ArrayNode 时返回的 JSON 结构如下:

            {}client 
              records[]
            

            并且您想检查记录节点中是否包含某些内容 然后你可以使用方法 size();

            if (recordNodes.get(i).size() != 0) {}
            

            【讨论】:

              【解决方案8】:

              我会执行以下操作来检查空对象

              obj.similar(new JSONObject())
              

              【讨论】:

              • 这其实很聪明。我不会在这么小的东西上使用它,但这绝对不是我以前想过的空支票。
              【解决方案9】:

              我在 JSONObject 和 JSONArray() 上添加了 isEmpty() 方法

               //on JSONObject 
               public Boolean isEmpty(){         
                   return !this.keys().hasNext();
               }
              

              ...

              //on JSONArray
              public Boolean isEmpty(){
                  return this.length()==0;        
              }
              

              你可以在这里https://github.com/kommradHomer/JSON-java

              【讨论】:

                【解决方案10】:

                使用以下代码:

                if(json.isNull()!= null){  //returns true only if json is not null
                
                }
                

                【讨论】:

                • 演员阵容如何?
                【解决方案11】:
                obj.length() == 0
                

                是我会做的。

                【讨论】:

                  【解决方案12】:
                  Object getResult = obj.get("dps"); 
                  if (getResult != null && getResult instanceof java.util.Map && (java.util.Map)getResult.isEmpty()) {
                      handleEmptyDps(); 
                  } 
                  else {
                      handleResult(getResult); 
                  }
                  

                  【讨论】:

                    【解决方案13】:

                    JSON 符号 {} 表示一个空对象,表示没有成员的对象。这与 null 不同。它也不是字符串,因为您试图将其与字符串“{}”进行比较。 我不知道您使用的是哪个 json 库,但请尝试寻找类似的方法:

                    isEmptyObject() 
                    

                    【讨论】:

                    • 感谢您的建议。我正在使用 org.json(jar 文件 org.json-20120521.jar)。它看起来不像有一个名为 isEmptyObject 的方法。 =(
                    • @Classified 我对 org.json 不熟悉,所以这可能不是最佳方式。空对象没有成员,因此方法 keys() 应该返回长度为零的迭代器。 getJSONObject("problemkey").keys() - 检查它的长度。
                    • 你使用哪个库?我通过谷歌搜索找到了 org.json,所以我不知道它的好坏,但它看起来相当受欢迎。 json.org/javadoc/org/json/JSONObject.html。再次感谢您的回复和帮助
                    • 现在是杰克逊。但这并不意味着 org.json 不好,只是不同而已。
                    • 另一种解决方法是将您的问题值转换为 JSON 字符串并将其与字符串“{}”进行比较。像 obj.get("dps").toString().equals("{}") 之类的东西。但是请检查 toString 实际上返回的关于空格的内容。
                    【解决方案14】:

                    试试/*string with {}*/ string.trim().equalsIgnoreCase("{}")),可能有多余的空格什么的

                    【讨论】:

                    • 感谢您的建议。我查了一下,没有多余的空格。 =(
                    【解决方案15】:

                    试试:

                    if (record.has("problemkey") && !record.isNull("problemkey")) {
                        // Do something with object.
                    }
                    

                    【讨论】:

                    • 感谢您的建议。当我尝试您的代码时,它认为 {} 不为空并打印我的消息,这不是我想要的。我不知道为什么它认为 {} 不为空。
                    猜你喜欢
                    • 2019-03-22
                    • 1970-01-01
                    • 2023-03-15
                    • 1970-01-01
                    • 2014-12-24
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多