通常在對 json 格式的字符串進行解析時,會遇到取具體字段值的處理,以獲取 String 字段為例,在方法調用上有以下兩種,
- getString
要求較高,如果沒有取到對應字段,就會拋 JSONException,不建議用 - optString
當沒有取到字段時,會返回"",也可以指定返回某個值。當有對應值時,取到的就是對應值。
同理,在解析任何類型是,應該都會有 opt 的獲取方式,以 optString 和 optJSONArray 為例,在具體使用上需要考慮以下幾種異常情況。
不存在字段
在用 optString 時會獲取到默認值 ""。存在字段,但格式不正確
//例如這種,在運行解析時會拋異常
//建議做好異常捕獲和日志跟蹤
{
"name":
}
- 存在字段,但賦值為 null
{
//像這樣為 null 的情況處理時就返回默認值 "",當然默認值可以指定
"name":null,
//像這樣就會直接讀取為 "null" 值字符串
"name2":"null",
//像這樣就會返回數(shù)組為 null
"array":null
}
- 存在字段,但賦值為空
{
//像這樣就會直接讀取為 "" 值字符串
"name":"",
//像這樣就會返回一個空數(shù)組
"array":[]
}
- 存在字段,但賦值不正確
{
//如果以 optString 獲取,最終會成為 "123" 字符串
"name":123,
//如果以 optJSONArray 獲取,最終會返回 null
"array":""
}
- 存在字段,但數(shù)組中個別元素為 null,"null"
//像這樣,解析這個數(shù)組,因為會以對象的形式去解析每個元素
//index == 1 時返回的就是 null
//index == 3,4 時返回的也都是 null
{
"array":[{
"itemName":"1"
},null,{
"itemName":"2",
"itemVal":"value"
},"null","name"]
}
我們在手動解析 json 的時候,永遠都不要太相信數(shù)據源,要做好容錯,否者數(shù)據的源頭出問題,后續(xù)的處理都將會是有問題的。