【问题标题】:Error parsing data org.json.JSONException - Java解析数据时出错 org.json.JSONException - Java
【发布时间】:2013-02-25 08:14:17
【问题描述】:

我对 Android 比较陌生,我正在尝试解析一些数据,但我似乎在 LogCat 中收到以下错误:

Unexpected value from nativeGetEnabledTags: 0
Error parsing data org.json.JSONException

我的 JSON 数据来自: http://api.wunderground.com/api/180dde448747af27/forecast/q/UK/Bradford.json

我正在使用以下代码提取数据:

JSONArray forecasts = json.getJSONArray("forecast");

for (int i=0;i<forecasts.length();i++) {                        
    HashMap<String, String> map = new HashMap<String, String>();    
    JSONObject e = forecasts.getJSONObject(i);

    // simpleforecast is a json array
    JSONArray forecastday = json.getJSONArray("forecastday");
    JSONObject fd = forecastday.getJSONObject(i);

    String icon = fd.getString("icon");

    map.put("id", String.valueOf(i));
    map.put("icon", icon);
    mylist.add(map);            
}

我相信这个错误与我的 JSON 拉取有关,我可能没有正确解析它,但我似乎找不到正确的方法来解决它。这段代码被一个 try-catch 包围,然后我有一个列表适配器,我将代码添加到。

如果我遗漏了任何内容,我深表歉意,但我相信这已经足够了,因为我相信这就是错误的来源。

【问题讨论】:

  • 如果你没有捕捉到异常,LogCat 中应该会显示一个行号,然后你就知道是哪个语句导致了它,那么你应该缩小搜索范围。
  • forecast 不是数组,请改用getJSONObject

标签: java android json


【解决方案1】:

您将 forcast 误识别为 JSONArray。

所以你不应该使用JSONArray forecasts = json.getJSONArray("forecast");来解析预测,你应该使用JSONObject forecastObj = json.getJSONObject("forecast")。但是,forecastday 是一个 json 数组,因此您可以使用forecastObj.getJSONArray("forecastday"),然后对其进行处理。

【讨论】:

  • 感谢您的帮助,内容非常丰富。我现在已经开始工作了。
【解决方案2】:

解析当前 json 字符串以从 forecastday JSONArray 获取 icon

// get Json forecast object
JSONObject forecasts_obj = json.getJSONObject("forecast");
// get Json simpleforecast object
JSONObject simpleforecast_obj = forecasts_obj.getJSONObject("simpleforecast");

// get Json forecastday Array
JSONArray forecastday_arr = simpleforecast_obj.getJSONArray("forecastday");

for (int i=0;i<forecastday_arr.length();i++) {                        
    HashMap<String, String> map = new HashMap<String, String>();    
    JSONObject e = forecastday_arr.getJSONObject(i);

    String icon = e.getString("icon");
    map.put("id", String.valueOf(i));
    map.put("icon", icon);
    mylist.add(map);            
}

【讨论】:

  • 谢谢你,它解释了很多,我现在已经开始工作了。非常感谢。
猜你喜欢
  • 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
相关资源
最近更新 更多