本偏讲的所有json对象都是net.sf.json包下的
JSONObject.put(Object key, Object value)
key不能为null
value会替换原来key对应的value
value可以为null, 为null时移除原来的key (可以直接写put(“key”, null);)
调用element(String key, Object value)方法
返回Object是原来被替换的value, 可能为nullJSONObject element(String key, Object value, JsonConfig jsonConfig)
key 不能为 null
value 会替换原来 key 对应的 value
value 可以为值等于 null 的对象, 值为 null 时移除原来的 key (不可以直接写成 element(“key”, null);)
返回 JSONObject 当前的JSONObject 对象
总结 : 大部分情况下没有区别, 但是有这样一个坑
/**
* 使用put()方法这是对的
*/
public void responseJson() {
JSONObject data = new JSONObject();
data.put("name", null);
System.out.println(data.toString());
}
/**
* 使用put()方法, 这种方式会抛出空指针异常
*/
public void responseJson() {
JSONObject data = new JSONObject();
// 运行时会抛出空指针异常, 因为之前没有key为"name"的复制, put返回的Object对象为null
System.out.println(data.put("name", "123").toString());
}
/**
* 使用element()方法, 这种方式是正确的
*/
public void responseJson() {
JSONObject data = new JSONObject();
// 运行时会正确输出 {"success":"123"}
System.out.println(data.element("name", "123").toString());
}
/**
* 使用put()方法
*/
public void responseJson() {
JSONObject data = new JSONObject();
data.put("name", "abc");
// 运行时都会输出 abc
System.out.println(data.put("name", null).toString());
// 如果上一行运行, 这里就会抛出空指针异常
System.out.println(data.put("name", "123").toString());
// 这里会输出 {"success":"123"}
System.out.println(data.toString());
}
/**
* 使用element()方法
* 这样直接传入null编译器会直接报错, 代码不会编译通过
*/
public void responseJson() {
JSONObject data = new JSONObject();
data.element("name", null);
System.out.println(data.toString());
}