getInnerMap()源码:
public Map<String, Object> getInnerMap() {
return this.map;
}
this.map就是这个JSONObject对象对应的原生Map,且被final修饰,无法直接对其修改。
getJSONObject(String s)源码:
public JSONObject getJSONObject(String key) {
Object value = this.map.get(key);
if (value instanceof JSONObject) {
return (JSONObject)value;
} else if (value instanceof Map) {
return new JSONObject((Map)value);
} else {
return value instanceof String ? JSON.parseObject((String)value) : (JSONObject)toJSON(value);
}
}
java的Map类的get方法,当找不到传参的key时,返回值是null,对应这里value就是null,此时会走到最后一个条件里,调用value=(JSONObject)toJSON(value),此时value被赋值null;
看JSON类的toJSON(value)源码:
public static Object toJSON(Object javaObject) {
return toJSON(javaObject, SerializeConfig.globalInstance);
}
public static Object toJSON(Object javaObject, SerializeConfig config) {
if (javaObject == null) {
return null;
} else if (javaObject instanceof JSON) {
return javaObject;
} else {
.....
}
当toJSON()传参为nul时,返回值也是null.
所以,getJSONObject(String s)找不到key等于传参s时,会返回null.