解析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
}
目前我从 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
}