通常在對 json 格式的字符串進行解析時送矩,會遇到取具體字段值的處理,以獲取 String 字段為例,在方法調(diào)用上有以下兩種先馆,
- getString
要求較高,如果沒有取到對應(yīng)字段躺彬,就會拋 JSONException煤墙,不建議用 - optString
當(dāng)沒有取到字段時,會返回""宪拥,也可以指定返回某個值仿野。當(dāng)有對應(yīng)值時,取到的就是對應(yīng)值她君。
同理脚作,在解析任何類型是,應(yīng)該都會有 opt 的獲取方式缔刹,以 optString 和 optJSONArray 為例球涛,在具體使用上需要考慮以下幾種異常情況。
不存在字段
在用 optString 時會獲取到默認(rèn)值 ""校镐。存在字段亿扁,但格式不正確
//例如這種,在運行解析時會拋異常
//建議做好異常捕獲和日志跟蹤
{
"name":
}
- 存在字段鸟廓,但賦值為 null
{
//像這樣為 null 的情況處理時就返回默認(rèn)值 ""从祝,當(dāng)然默認(rèn)值可以指定
"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 的時候链嘀,永遠(yuǎn)都不要太相信數(shù)據(jù)源萌狂,要做好容錯,否者數(shù)據(jù)的源頭出問題怀泊,后續(xù)的處理都將會是有問題的茫藏。