JSON与null的解惑

来源:互联网 发布:软件beta版已过期 编辑:程序博客网 时间:2024/05/19 20:22

从做程序到现在,用JSON也用了好些年了。突然发现JSON在put空值时有时会有key而有时又不会有。为了解除这个疑惑我做了以下测试。 我用的包是:json-lib-2.4-jdk15.jar

 

例一:

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.         JSONObject json = new JSONObject();  
  3.         json.put("key"null);  
  4.         System.out.println(json);  
  5. }  

 可以看到,控制输出:{}

由此可见,如果put一个空指针(null)给JSON,JSON会自动屏蔽此key不会有任何处理。

 

我们再来看看另外一个例子。

 

例二:

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.        JSONObject json = new JSONObject();  
  3.        String value = "null";  
  4.        json.put("key", value);  
  5.        System.out.println(json);  
  6. }  

 控制台输出:{"key":null}

 

在例二中,我们将String类型的字符串value的值设置为“null”。此时JSON会带有key及value存在。大家请注意看value为null。并不是“null”不带引号。我猜测应该是JSON自动将字符串“null”转换为可识别的空值。如果我们将value的值设置为非“null”的任何字符,JSON都会带有引号。

 

 

综上所述:如果需要在value为空时不显示key,则可以直接传递null。但是如果需要不管在value是否为空时都带有key则需要手动将null转换为“null”字符串即可。


JSONObject 判断字符串null还是null值  

目前发现有两种包.两种不一样的json包.
第一种情况是: json包是json-lib包是net.sf.json
怎样判断JSONObject返回的是字符串null还是null值.
研究源码发现.JSONObject里有一段代码是当遇到json串中是null的时候.返回JSONNUll.
所以区分null时这样:
JSONObject jo = JSONObject.fromObject("{a:null,b:\"null\"}");
Object o = jo.get("a");
if(o instanceof JSONNull){
System.out.println("Is empty null");
}else{
System.out.println("is String null");
}
o = jo.get("b");
if(o instanceof JSONNull){
System.out.println("Is empty null");
}else{
System.out.println("is String null");
}
输入的结果为
JSONObject 判断字符串null还是null值 - ckaaaa - ckaaaa

第二种情况是: org.json的包

JSONObject jo = new JSONObject(("{\"a\":\"null\",\"b\":null}"));
if(jo.get("a") instanceof String){
System.out.println("a is String null");
}else{
System.out.println("a is empty null");
}
if(jo.get("b") instanceof String){
System.out.println("a is String null");
}else{
System.out.println("a is empty null");
}
System.out.println(jo.get("b").getClass());
JSONObject 判断字符串null还是null值 - ckaaaa - ckaaaa
 这时候发现.返回的null是JSONObject.NUll
两种包不一样的返回NUll值

0 0