我从以下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。有人可以解释这个问题吗?
答案 0 :(得分:0)
JSONObject.getJSONObject
只能返回JSONObject
。它不会返回boolean
,long
或String
,并且特别不会返回JSONObject.NULL
,因为它本身不是JSONObject
(它表示Java文档中为Object
,并且在实现中具有特定的私有类型
使用isNull
预先检查它,或者只是接受它抛出异常并做好准备。当然你也可以使用通用的get
并在之后检查JSONObject.NULL
的结果,也许使用instanceof
,这些都不会使代码更简单,所有这些都会引入cast /在某些时候投射尝试。
我将Android文档链接起来以便于阅读,但您当然可以深入研究源代码,例如getJSONObject
。如果您有兴趣,可以在同一文件的开头找到NULL
。