как сделать отказоустойчивый код при разборе JSONObject? - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время я извлекаю объект JSON из algolia, например, в свое приложение:

{
  "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"
}

, как вы можете видеть, в этой записи нет никакого поля "instagram" в JSON выше. но другие записи имеют поле «instagram» в JSON. У меня проблема при анализе этого JSON в моем приложении для Android, потому что не все данные содержат поле «instagram».

Я анализирую поле «instagram» с помощью этого кода, если поле «instagram» недоступно извходящий JSON, затем я хочу назначить пустую строку, как показано ниже:

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

тип данных jsonObject - это класс java JSONObject (import org.json.JSONObject)

но эта линия приведет к краху. сообщение об ошибке:

Причина: org.json.JSONException: Нет значения для Instagram

E / CrashlyticsCore: неожиданный метод, вызванный в AppMeasurement.EventListener: onEvent (java.lang.String, java.lang.String, android.os.Bundle, java.lang.Long);возвращая null

так как написать код, который может обрабатывать оба случая, имеет ли оно поле «instagram» или нет из входящего json?

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Как подсказал @Pemba Tamang, используйте jsonObject.optString("instagram",""); или используйте gson библиотеку, она обрабатывает ошибки в json

0 голосов
/ 04 ноября 2019

Вы можете использовать try, catch для этого:

try{

        // try to parse ur Json here

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