解析JSONObject时如何做容错代码?

how to make fault tolerant code when parsing JSONObject?

目前我从 algolia 中检索了一个 JSON 对象到我的应用程序:

{
  "title": "Manajemen Masjid sesuai sunnah Rasulullah",
  "address": "Jl. Tebet Utara I No.40, RT.8/RW.2, Tebet Tim., Tebet, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12820, Indonesia",
  "additionalAddress": "",
  "capacity": 0,
  "city": "Jakarta",
  "creatorIsVerified": true,
  "description": "Dua aplikasi milik Facebook",
  "email": "abcd@gmail.com",
  "eventID": "000b4e1a-f65e-4d77-83ce-d0770d344d4b",
  "eventType": "Kajian Umum",
  "_geoloc": {
    "lat": -6.2256428,
    "lng": 106.8527658
  },
  "hasBeenApproved": true,
  "numberOfContact": "081808664",
  "price": 0,
  "rankPoint": 300000000,
  "speaker": "Syafiq Reza Basalamah",
  "venue": "Aql Islamic Center 2",
  "website": "http://www.lakuin.id"
}

如您所见,在这条记录中,上面JSON中没有"instagram"字段。但其他记录在 JSON 中有 "instagram" 字段。我在 Android 应用程序中解析 JSON 时遇到问题,因为并非所有数据都包含 "instagram" 字段。

我使用此代码解析 "instagram" 字段,如果传入的 JSON 无法使用 "instagram" 字段,那么我想分配一个空字符串,如下面的代码所示:

val instagram = jsonObject.get("instagram") as? String ?: ""

jsonObject数据类型是javaclassJSONObject(导入org.json.JSONObject)

但是那一行会导致崩溃。错误信息:

Caused by: org.json.JSONException: No value for instagram

E/CrashlyticsCore: Unexpected method invoked on AppMeasurement.EventListener: onEvent(java.lang.String, java.lang.String, android.os.Bundle, java.lang.Long); returning null

那么如何编写可以处理这两种情况的代码,它有 "instagram" 字段还是没有来自传入的 json ?

正如@Pemba Tamang 建议的那样,使用 jsonObject.optString("instagram",""); 或使用 gson 库,它处理 json

中的错误

你可以使用 try , catch :

try{

        // try to parse ur Json here

    }catch (JSONException e){
        // here you can assign the empty String
    }