Java / Kotlin: ошибка разбора объекта JSON - PullRequest
0 голосов
/ 22 мая 2018

У меня есть текстовый json, который я восстанавливаю из API, но не могу его декодировать, потому что в json у меня есть только один объект, а не несколько:

{  
   "address": "mickaelnanah@gmail.com",
   "username": "mickaelnanah",
   "domain": "gmail.com",
   "md5Hash": "0f6082627bfdeb56a3792f52ce8f0cb8",
   "validFormat": true,
   "deliverable": true,
   "fullInbox": false,
   "hostExists": true,
   "catchAll": false,
   "disposable": false,
   "free": true
}

мой код:

val jsonObj = JSONObject(jSonString.substring(jSonString.indexOf("{"), jSonString.lastIndexOf("}") + 1))
val mail = Email(jsonObj.getJSONObject("deliverable") as String)
println(mail.email)

Ошибка:

Исключение в потоке "main" org.json.JSONException: JSONObject ["поставляемый"] не является JSONObject.

Iпонять ошибку, это потому, что у меня нет имени для объекта, как я могу напрямую взять поля?

решено:

val jsonObj = JSONObject(jSonString.substring(jSonString.indexOf("{"), jSonString.lastIndexOf("}") + 1))

            val mail: String = jsonObj.get("deliverable").toString()

1 Ответ

0 голосов
/ 22 мая 2018

Поскольку используемые вами ключи не относятся к вложенным объектам внутри вашего объекта JSON верхнего уровня, для доступа к ним следует использовать методы, отличные от getJSONObject.

Например, для deliverable поле, которое является логическим значением:

val deliverable: Boolean = jsonObj.getBoolean("deliverable")

Или для поля address строка:

val address: String = jsonObj.getString("address")

Допустимый вариант использования для getJSONObject будетбыть, когда у вас есть вложенный объект, подобный этому:

{
    "nested": {
        "foo": "bar"
    }
}

Здесь вы можете сделать jsonObj.getJSONObject("nested").getString("foo"), например.

...