java - org.json.JSONException: JSONObject["status"] 不是 JSONObject
问题描述
我现在正在使用来自http://wiki.swarma.net/index.php?title=%E5%BD%A9%E4%BA%91%E5%A4%A9%E6%B0%94API/的天气 API v2并希望将 JSONObject 转换为可打印的字符串。但是,当我处理以下代码时,发生了两个错误:
public class getApi {
private static final String WEATHER_MAP_URL = "https://api.caiyunapp.com/v2/TAkhjf8d1nlSlspN/121.6544,25.1552/realtime.json";
private static final String WEATHER_TEST_API = "TAkhjf8d1nlSlspN";
public static JSONObject getWeatherJson() {
try {
URL url = new URL( WEATHER_MAP_URL );
HttpURLConnection connection =
(HttpURLConnection)url.openConnection();
connection.addRequestProperty( "x-api-key", WEATHER_TEST_API );
BufferedReader reader = new BufferedReader(
new InputStreamReader( connection.getInputStream()) );
StringBuffer json = new StringBuffer( 1024 );
String tmp;
while( (tmp = reader.readLine()) != null )
json.append(tmp).append("\n");
reader.close();
JSONObject data = new JSONObject( json.toString() );
if(data.getJSONObject("status").toString() != "ok" ) {
return null;
}
return data;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
public static void main( String[] args ) {
JSONObject WeatherJson = getWeatherJson();
try {
JSONArray details = WeatherJson.getJSONObject("result").getJSONObject("hourly").
getJSONArray("skycon");
System.out.println(details.getJSONObject(0).getJSONObject("value").toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
JSONObject 结构,也显示在上面的链接中,如下所示:
{
"status":"ok",
"lang":"zh_CN",
"server_time":1443418212,
"tzshift":28800,
"location":[
25.1552, //latitude
121.6544 //longitude
],
"unit":"metric",
"result":{
"status":"ok",
"hourly":{
"status":"ok",
"skycon":[
{
"value":"Rain",
"datetime":"2015-09-28 13:00"
},
{
...
}]
}
}
}
发生错误:
org.json.JSONException: JSONObject["status"] is not a JSONObject.
at org.json.JSONObject.getJSONObject(JSONObject.java:557)
at getApi.getWeatherJson(getApi.java:34)
at getApi.main(getApi.java:45)
Exception in thread "main" java.lang.NullPointerException
at getApi.main(getApi.java:47)
我查看了有关该主题的类似帖子,is not a JSONObject Exception
但发现没有一个可以帮助我。我怀疑请求数据有问题,所以实际上,getWeatherJson()
返回一个空对象并导致NullPointerException
and JSONObjectException
。
谁能帮我写代码?
解决方案
根据getJSONObject()
Javadoc,如果返回的对象不是真正的 JSON 对象,则此方法将引发异常,这不是因为“状态”是一个字符串。因此,尝试使用data.getString("status")
.
推荐阅读
- git - 提交时 Azure 管道筛选器 github 用户
- c++ - 代码没有正确执行延迟根本不起作用任何帮助表示赞赏
- solr - 创建新的 SOLR 请求处理程序时出错
- javascript - RxJS 连接两个 observables
- kubernetes - Kubernetes 上的 ASP.NET Core Identity 性能不佳
- angular - 如何使用 Angular 修改 Highcharts 标签中的样式属性?
- matplotlib - 线性回归以拟合 Python 中的幂律
- jenkins - 如何将 credentials.json 文件加载到 jenkins 管道作业中?
- powershell - 多行数据:使用 Powershell 从 CSV 中删除 LF(但不是 CRLF)
- azure - Azure DevOps 管道:Azure 复制文件步骤 V4 错误 - 找不到指定的文件夹