我正在从下面的JSONObject中获取一个结果“JSONObject”:
{
"success" : true,
"message" : "",
"result" : {
"uuid" : "e606d53c-8d70-11e3-94b5-425861b86ab6"
}
}我使用的是以下代码:
CloseableHttpClient httpclient = HttpClients.createDefault();
String url = "some url";
HttpGet httpget20 = new HttpGet(url);
httpget20.setHeader("apisign",buildHmacSignature(url, apisecret));
try ( CloseableHttpResponse response2 = httpclient.execute(httpget20)){
HttpEntity entity = response2.getEntity();
JSONObject obj2 = new JSONObject(EntityUtils.toString(entity));
JSONObject result = obj2.getJSONObject("result");obj2是整个json对象,包括“成功”、“消息”和“结果”。但是,此行代码会生成以下错误消息:
Exception in thread "AWT-EventQueue-0" org.json.JSONException: JSONObject["result"] is not a JSONObject.我不确定为什么JSONObject不能是JSONObject。有人能解释一下这里的问题吗?
发布于 2017-12-27 22:22:41
JSONObject.getJSONObject只能返回JSONObject。它不会返回boolean、long或String,也不会特别返回JSONObject.NULL,因为它本身不是一个JSONObject (它在文档中说的是Java Object,并且在实现中有一个特定的私有类型)。
使用isNull预先检查它,或者只是接受它抛出异常并为其做好准备。当然,您也可以使用泛型get并在之后使用JSONObject.NULL检查结果,也许使用instanceof,只是这些都不会使代码变得更简单,所有这些都会在某个时候引入强制转换/强制转换尝试。
我只是为了可读性而链接了Android文档,当然你也可以深入研究源代码,比如getJSONObject。如果您感兴趣,可以在同一文件的开头找到NULL。
https://stackoverflow.com/questions/47992662
复制相似问题