Java / Kotlin:解析JSON对象错误

时间:2018-05-22 18:03:26

标签: kotlin org.json

我有一个文本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 [“deliverrable”]不是JSONObject。

我理解错误,因为我没有对象的名字,我怎么能直接拿这些字段?

解决:

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

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

1 个答案:

答案 0 :(得分:3)

由于您使用的密钥并未引用顶级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")