JSON与null的解惑

从做程序到现在,用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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值