错误:JSONObject的[ “结果”]不是一个JSONObject

问题描述:

我获取一个JSONObject “结果”,从以下的JSONObject:错误: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。有人可以在这里解释问题吗?

+1

你可以添加最小的运行代码吗? – johnII

+0

请更多代码! – Ele

+0

当然,我更新了这个问题。 – canthandlehtml

JSONObject.getJSONObject只能返回JSONObject。它不会返回boolean,longString,特别是它不会返回JSONObject.NULL,因为这不是JSONObject本身(它说文档中的Java Object,并且在实现中具有特定的私有类型)。
使用isNull预先检查它,或者只是接受它抛出一个异常并做好准备。当然,你也可以使用通用的get,然后在JSONObject.NULL之后检查结果,也许使用instanceof,这些都不会让代码更简单,并且它们都会在某个时候引入铸造/铸造尝试。

我为了便于阅读而链接了Android文档,但您当然也可以深入了解源代码,如getJSONObject。如果您有兴趣,您可以在同一个文件的开头找到NULL