【问题标题】:Error: JSONObject["result"] is not a JSONObject错误:JSONObject["result"] 不是 JSONObject
【发布时间】:2017-12-27 22:22:40
【问题描述】:

我正在从以下 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。有人可以在这里解释这个问题吗?

【问题讨论】:

  • 可以添加最小运行代码吗?
  • 请提供更多代码!
  • 当然,我更新了问题。
  • 你代码的json解析部分没问题。我希望您的问题与从 HttpEntity 中获取字符串有关。 EntityUtils.toString(entity) 返回的究竟是什么字符串?
  • 你能验证 obj2 是否确实和你发布的一样吗?

标签: java json


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-05-25
    • 2018-11-14
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多