运行以下代码:
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) { JSONObject test = new JSONObject(); test.put( "name" , "kewen" ); test.put( "empty" , null ); System.out.println( "test.optString(\"empty\"):" +test.optString( "empty" )); System.out.println( "test.optString(\"name\"):" +test.optString( "name" )); System.out.println( "test.getString(\"name\"):" + test.getString( "name" )); System.out.println( "test.getString(\"empty\"):" + test.getString( "empty" )); } |
运行一把就会看到这样的结果 、
1
2
3
4
5
6
|
test.optString( "empty" ): test.optString( "name" ):kewen test.getString( "name" ):kewen Exception in thread "main" net.sf.json.JSONException: JSONObject[ "empty" ] not found. at net.sf.json.JSONObject.getString(JSONObject.java: 2247 ) at basicUtils.JSONUtil.main(JSONUtil.java: 41 ) |
因为:在JSONObject的key存在值得时候,两者是没有什么区别的,然后如果key对应的value为null,那么getString方法就会报错。
至于为什么会这样我们可以看一下getString的源码
1
2
3
4
5
6
7
8
|
public String getString( String key ) { verifyIsNull(); Object o = get( key ); if ( o != null ){ return o.toString(); } throw new JSONException( "JSONObject[" + JSONUtils.quote( key ) + "] not found." ); } |