判断JSONObject是否为空

json版本:

        <dependency>
            <groupId>net.sf.json-libgroupId>
            <artifactId>json-libartifactId>
            <version>2.4version>
            <classifier>jdk15classifier>
        dependency>

假设一个json,格式为:
{
“code”:200,
“message”:”OK”,
“detail”:{
“id”:”123”,
“name”:”liuyang”
}
}

或者
{
“code”:200,
“message”:”FAIL”,
“detail”:null
}
需要判断detail是否为空,开始的做法是:

JSONObject detail = obj.getJSONObject("detail");
if(detail!=null){ //do something }

结果不论哪种json,都能进去。。这是一个大坑。。
然后试着随便调了个方法,也不会报空指针异常。

    String json =   "{\"code\":200,\"message\":\"FAIL\",\"detail\":null}";
    @Test
    public void testNull(){
        JSONObject object = JSONObject.fromObject(json);
        JSONObject detail = object.getJSONObject("detail");
        System.out.println(detail.toString());
        if(detail!=null &&  !"null".equals(detail)){
            System.out.println("detail is not null");
        }
    }
}

运行结果:

null
detail is not null

这个jsonobject可以输出为null,但是不等于null或“null”。。

我用了containsKey方法来判断该值是否为空,
即obj.containsKey(“id”);
若该json对象中存在该key则该对象不为空

String json =   "{\"code\":200,\"message\":\"FAIL\",\"detail\":null}";
    @Test
    public void testNull(){
        JSONObject object = JSONObject.fromObject(json);
        JSONObject detail = object.getJSONObject("detail");
        System.out.println(detail.toString());
        if(detail.containsKey("id")){
            System.out.println("obj is not null");
        }else{
            System.out.println("obj is null");
        }
    }

输出结果:

null
obj is null

网上也有说用isEmpty() 和isNullObject()的,应该也是可以的,但是个人觉得这两个方法在名称上过于类似,容易混淆,为了避免不必要的错误,还是尽量少用为好。

你可能感兴趣的:(java)