簡體   English   中英

org.json.JSONException:JSONObject [“status”]不是JSONObject

[英]org.json.JSONException: JSONObject[“status”] is not a 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()返回一個null對象並導致NullPointerExceptionJSONObjectException

任何人都可以幫我代碼嗎?

根據getJSONObject() Javadoc ,如果返回的對象不是真正的JSON對象,則此方法將拋出異常,這不是因為“status”是字符串。 因此,請嘗試使用data.getString("status")

您發布的JSON文檔中的狀態字段不是對象。 在JSON中,對象用{}括號括起來。 但是, 結果節點是一個嵌套對象,它保存狀態鍵/值對。 請嘗試以下方法:

JSONObject data = new JSONObject(json.toString());
  if(data.getJSONObject("result").get("status").toString() != "ok" ) {
    return null;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM