错误:JSONObject [“result”]不是JSONObject

时间:2017-12-27 13:00:46

标签: java json

我从以下JSONObject获取JSONObject“result”:

{
    "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对象,包括“success”,“message”和“result”。 但是,这行代码会生成以下错误消息:

Exception in thread "AWT-EventQueue-0" org.json.JSONException: JSONObject["result"] is not a JSONObject.

我不确定JSONObject如何不能成为JSONObject。有人可以解释这个问题吗?

1 个答案:

答案 0 :(得分:0)

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

我将Android文档链接起来以便于阅读,但您当然可以深入研究源代码,例如getJSONObject。如果您有兴趣,可以在同一文件的开头找到NULL