在JSONObject獲取value有多種方法,若是key不存在的話,這些方法無一例外的都會拋出異常。若是在線環境拋出異常,就會使出現error頁面,影響用戶體驗,針對這種狀況最好是使用optXXX方法。
getString方法會拋出異常,以下所示:spa
1
2
3
4
5
6
7
8
9
10
|
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.");
}
|
getInt方法會拋出異常,以下所示:code
1
2
3
4
5
6
7
8
9
10
|
public int getInt(String key)
{
verifyIsNull();
Object o = get(key);
if (o != null)
{
return o instanceof Number ? ((Number) o).intValue() : (int) getDouble(key);
}
throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");
}
|
getDouble方法會拋出異常,以下所示: seo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public double getDouble(String key)
{
verifyIsNull();
Object o = get(key);
if (o != null)
{
try
{
return o instanceof Number ? ((Number) o).doubleValue() : Double.parseDouble((String) o);
}
catch (Exception e)
{
throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");
}
}
throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a number.");
}
|
getBoolean方法會拋出異常,以下所示: ip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public boolean getBoolean(String key)
{
verifyIsNull();
Object o = get(key);
if (o != null)
{
if (o.equals(Boolean.FALSE) || (o instanceof String && ((String) o).equalsIgnoreCase("false")))
{
return false;
}
else if (o.equals(Boolean.TRUE) || (o instanceof String && ((String) o).equalsIgnoreCase("true")))
{
return true;
}
}
throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] is not a Boolean.");
}
|
JSONObject有不少optXXX方法,好比optBoolean,optString,optInt。它們的意思是,若是JsonObject有這個屬性,則返回這個屬性,不然返回一個默認值。下面以optString方法爲例說明一下其底層實現過程:get
1
2
3
4
5
|
public String optString(String key)
{
verifyIsNull();
return optString(key, "");
}
|
1
2
3
4
5
6
|
public String optString(String key, String defaultValue)
{
verifyIsNull();
Object o = opt(key);
return o != null ? o.toString() : defaultValue;
}
|