我有一个文本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()
答案 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")
。