我们每天都在用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,及时处理。
断点来看一下: