前言
上一节提到:
可以把JSONObject 当成一个 Map<String,Object> 来看,只是 JSONObject 提供了更为丰富便捷的方法,方便我们对于对象属性的操作。
可以把 JSONArray 看成 JSONObject 对象的一个集合。
因此本节将会从它们与所实现的类之间的异同点来分析
JSONObject
异:Map
其修改只是简单适应json,使我们使用起来更便捷,所以只简单分析一下我们经常会遇到的部分。由于在使用中带来的直接影响不大,只需要大概了解就行。
key是Number、Character、Boolean、UUID的实例,会进行额外的判断
以下以containsKey和get方法为例
/**
* JSON对象中是否含有某个键。如果key是Number、Character、Boolean、UUID的实例,会进行额外的判断,即判断该键的字符串是否存在
*
* @param key
* @return
*/
public boolean containsKey(Object key) {
boolean result = map.containsKey(key);
if (!result) {
if (key instanceof Number
|| key instanceof Character
|| key instanceof Boolean
|| key instanceof UUID
) {
result = map.containsKey(key.toString());
}
}
return result;
}
/**
* 通过键获得值
*
* @param key
* @return
*/
public Object get(Object key) {
Object val = map.get(key);
if (val == null) {
if (key instanceof Number
|| key instanceof Character
|| key instanceof Boolean
|| key instanceof UUID
) {
val = map.get(key.toString());
}
}
return val;
}
新增getJSONObject(String key)和getJSONArray(String key)方法
/**
* 通过键获得值。不同于get的是,其更注重于返回JSONObject,能将map以及合法json字符转换为JSONObject对象返回
*
* @param key
* @return
*/
public JSONObject getJSONObject(String key) {
Object value = map.get(key);
if (value instanceof JSONObject) {
return (JSONObject) value;
}
if (value instanceof Map) {
return new JSONObject((Map) value);
}
if (value instanceof String) {
return JSON.parseObject((String) value);
}
return (JSONObject) toJSON(value);
}
/**
* 通过键获得JsonArray。其功能可参考getJSONObject的解释
*
* @param key
* @return
*/
public JSONArray getJSONArray(String key) {
Object value = map.get(key);
if (value instanceof JSONArray) {
return (JSONArray) value;
}
if (value instanceof List) {
return new JSONArray((List) value);
}
if (value instanceof String) {
return (JSONArray) JSON.parse((String) value);
}
return (JSONArray) toJSON(value);
}
同:Map
size isEmpty containsValue put clear remove等map常用方法在JSONObject中基本保持一致,以下简单放上几个方法展示。
/**
* JSON对象中键值对的数量
*
* @return
*/
public int size() {
return map.size();
}
/**
* JSON对象是否为空
*
* @return
*/
public boolean isEmpty() {
return map.isEmpty();
}
总结
通过上面的异同点我们已经能很好的理解“可以把JSONObject 当成一个 Map<String,Object> 来看,只是 JSONObject 提供了更为丰富便捷的方法,方便我们对于对象属性的操作“这句话了。不严谨的说,我们可以把它当做Map来使用。
JSONArray
简单的说,其实就是List结合了上面提到的JSONObject特性而成的类。怠惰了,以后遇到难点再分析。
受限于个人水平,文章一定存在很多缺陷,望大家理解并指正。