首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:结果[“JSONObject”]不是JSONObject

错误:结果[“JSONObject”]不是JSONObject
EN

Stack Overflow用户
提问于 2017-12-27 21:00:46
回答 1查看 2.2K关注 0票数 0

我正在从下面的JSONObject中获取一个结果“JSONObject”:

代码语言:javascript
复制
{
    "success" : true,
    "message" : "",
    "result" : {
            "uuid" : "e606d53c-8d70-11e3-94b5-425861b86ab6"
        }
}

我使用的是以下代码:

代码语言:javascript
复制
    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对象,包括“成功”、“消息”和“结果”。但是,此行代码会生成以下错误消息:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" org.json.JSONException: JSONObject["result"] is not a JSONObject.

我不确定为什么JSONObject不能是JSONObject。有人能解释一下这里的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2017-12-27 22:22:41

JSONObject.getJSONObject只能返回JSONObject。它不会返回booleanlongString,也不会特别返回JSONObject.NULL,因为它本身不是一个JSONObject (它在文档中说的是Java Object,并且在实现中有一个特定的私有类型)。

使用isNull预先检查它,或者只是接受它抛出异常并为其做好准备。当然,您也可以使用泛型get并在之后使用JSONObject.NULL检查结果,也许使用instanceof,只是这些都不会使代码变得更简单,所有这些都会在某个时候引入强制转换/强制转换尝试。

我只是为了可读性而链接了Android文档,当然你也可以深入研究源代码,比如getJSONObject。如果您感兴趣,可以在同一文件的开头找到NULL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47992662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档