我们每天都在用JSON,但JSON中的一些坑你们都知道吗?

比如,

JSON的value值为null时,key会直接没了?

value为Date类型时,JSON.toJSONString打印出来的是时间戳,取出来的却是Date?等。

废话不多说,直接上代码

	public static void main(String[] args) {
		demoJSON();
		// demoMap();
	}

	/**
	 *  JSON单元测试接口
	 */
	public static void demoJSON() {
		JSONObject json = new JSONObject();
		json.put("date",new Date());
		json.put("demo","");
		json.put("key",null);
		System.out.println("json.toString:" + json.toJSONString());
		String keyDate = json.get("date") + ""; 
		String demo1 = json.get("demo") + "";
		String key1 = json.get("key") + "";  //这里转成了String
		String key2 = json.getString("key");

		String key1str = key1.toString();  //未报错
		// String key2str = key2.toString(); //报错:java.lang.NullPointerException
		System.out.println("json -- keyDate:" + keyDate);
		System.out.println("json -- key1:" + key1);
		System.out.println("json -- key2:" + key2);
		System.out.println("json -- key1str:" + key1str);
        // System.out.println("json -- key1str:" + key1str);
		System.out.println("");

	}
//打印出来的
json.toString:{"date":1573971907724,"demo":""}
json -- keyDate:Sun Nov 17 14:25:07 CST 2019
json -- key1:null
json -- key2:null
json -- key1str:null

可见,

1.JSONObject的value对以格式date存放的数据,toJSONString时显示为时间戳;

2.如果value为null时,key将直接被取消,get到null值;

 

所以我们在开发过程中,往JSONObject中赋值时,一定要先判断该值是否为null,及时处理。

 

断点来看一下:

当JSONObject中的value=null时,key竟然会消失?_JSON值为null