如何在Android/Java的wunderground API中获得Json元素



我正在使用Wunderground api来获取android应用程序的每小时天气预报。我想接收像Temp和day这样的信息。

Json的一个例子是:

"hourly_forecast": [
    {
    "FCTTIME": {
    "hour": "11","hour_padded": "11","min": "00","min_unpadded": "0","sec": "0","year": "2014","mon": "7","mon_padded": "07","mon_abbrev": "Jul","mday": "8","mday_padded": "08","yday": "188","isdst": "1","epoch": "1404842400","pretty": "11:00 AM PDT on July 08, 2014","civil": "11:00 AM","month_name": "July","month_name_abbrev": "Jul","weekday_name": "Tuesday","weekday_name_night": "Tuesday Night","weekday_name_abbrev": "Tue","weekday_name_unlang": "Tuesday","weekday_name_night_unlang": "Tuesday Night","ampm": "AM","tz": "","age": "","UTCDATE": ""
    },
    "temp": {"english": "61", "metric": "16"},
    "dewpoint": {"english": "56", "metric": "13"},
    "condition": "Partly Cloudy",
    "icon": "partlycloudy",
    "icon_url":"http://icons.wxug.com/i/c/k/partlycloudy.gif",
    "fctcode": "2",
    "sky": "58",
    "wspd": {"english": "7", "metric": "11"},
    "wdir": {"dir": "SW", "degrees": "232"},
    "wx": "Partly Cloudy",
    "uvi": "9",
    "humidity": "83",
    "windchill": {"english": "-9999", "metric": "-9999"},
    "heatindex": {"english": "-9999", "metric": "-9999"},
    "feelslike": {"english": "61", "metric": "16"},
    "qpf": {"english": "0", "metric": "0"},
    "snow": {"english": "0", "metric": "0"},
    "pop": "2",
    "mslp": {"english": "29.92", "metric": "1013"}
    }

它似乎是在一个数组,但当我尝试以下它提出了一个错误不是一个json对象。

String row = rootArray.getAsJsonObject().get("sky").getAsString(); 

编辑**我可以让它用代码

工作
String skyText = rootobj.getAsJsonObject().getAsJsonArray("hourly_forecast").get(0).getAsJsonObject().get("sky").getAsString(); 

与rootobj是我的json对象

您发布的JSON不是数组。相反,它是一个具有名为"hourly_forecast"键的对象,该键指向一个数组值。

Key                Value
hourly_forecast    JSONArray

如果你的JSON是一个名为wundergroundData的字符串,你会像这样访问"sky"值:

JSONObject json = new JSONObject(wundergroundData);
String skyText = json.getJSONArray("hourly_forecast").get(0).getString("sky");

或者,更紧密地按照你发布的例子,我想这样的东西也会起作用:

String row = rootArray.getAsJsonObject().getJSONArray("hourly_forecast").get(0).getString("sky"); 

虽然,您可能希望重命名rootArray变量,因为根实际上是一个JSONObject。不是数组

如果这不起作用,发布完整的JSON,我可以告诉你你需要做什么来使用它。现在,您在开始处丢失了一个大括号或一个方括号,以及JSON的结尾。我假设JSON以大括号开头。如果它以方括号开头,那么您将需要像下面这样的代码:

String row = rootArray.get(0).getJSONArray("hourly_forecast").get(0).getString("sky"); 

最新更新