JSONObject 字段解析小記

通常在對 json 格式的字符串進行解析時,會遇到取具體字段值的處理,以獲取 String 字段為例,在方法調用上有以下兩種,

  • getString
    要求較高,如果沒有取到對應字段,就會拋 JSONException,不建議用
  • optString
    當沒有取到字段時,會返回"",也可以指定返回某個值。當有對應值時,取到的就是對應值。

同理,在解析任何類型是,應該都會有 opt 的獲取方式,以 optString 和 optJSONArray 為例,在具體使用上需要考慮以下幾種異常情況。

  1. 不存在字段
    在用 optString 時會獲取到默認值 ""。

  2. 存在字段,但格式不正確

//例如這種,在運行解析時會拋異常
//建議做好異常捕獲和日志跟蹤
{
    "name":
}
  1. 存在字段,但賦值為 null
{
    //像這樣為 null 的情況處理時就返回默認值 "",當然默認值可以指定
    "name":null,
    //像這樣就會直接讀取為 "null" 值字符串
    "name2":"null",
    //像這樣就會返回數(shù)組為 null
    "array":null
}
  1. 存在字段,但賦值為空
{
    //像這樣就會直接讀取為 "" 值字符串
    "name":"",
    //像這樣就會返回一個空數(shù)組
    "array":[]
}
  1. 存在字段,但賦值不正確
{
    //如果以 optString 獲取,最終會成為 "123" 字符串
    "name":123,
    //如果以 optJSONArray 獲取,最終會返回 null
    "array":""
}
  1. 存在字段,但數(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ù)的處理都將會是有問題的。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容