【问题标题】:How to get element in Json for wunderground API in Android/Java如何在 Json 中为 Android/Java 中的 wunderground API 获取元素
【发布时间】:2014-07-08 23:13:23
【问题描述】:

我正在使用 Wunderground api 获取 Android 应用程序的每小时天气预报。我想接收诸如温度和日期之类的信息。

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 对象

【问题讨论】:

    标签: java android json wunderground


    【解决方案1】:

    您发布的 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"); 
    

    【讨论】:

    • 非常感谢您的帮助。它似乎有点偏离,但它让我朝着正确的方向前进。我使用的代码是 String skyText = rootobj.getAsJsonObject().getAsJsonArray("hourly_forecast").get(0).getAsJsonObject().get("sky").getAsString();
    • 很高兴有帮助。一个提示,如果您要进行大量 JSON 工作,那么在您尝试访问对象时验证对象不为空且数组不为空是很重要的。仅出于这个原因,在工作中,我们倾向于使用GSON 来进行繁重的 JSON 工作,以便我们可以直接使用模型对象,这在许多情况下减少了我们必须执行的空值检查的数量。这也很有意义,因为无论如何我们在应用程序中的任何地方都使用这些模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多