You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中解析DarkSky JSON获取summary值失败求助

解决DarkSky JSON解析中"No value for data"的问题

嘿,别担心,这个问题其实很常见——就是JSON层级没搞对而已!咱们来一步步搞定它:

问题根源

你的JSON响应里,data数组并不是直接在根JSON对象下,而是嵌套在daily这个子对象里面的。你现在直接从根对象去取data,自然会找不到这个键,这就是Logcat抛出No value for data异常的原因。

咱们再确认下你的JSON结构:

{"latitude":..., "daily":{"data":[{"time":1570374000,"summary":"Light rain until evening.",...}]},...}

看到了吧?data是属于daily的子属性,所以得先拿到daily对象,再从中提取data数组。

修正后的解析代码

把你的jsonParse()方法改成下面这样就行:

private void jsonParse() {
    String jsonRawData = tvForecast.getText().toString();
    try {
        JSONObject jsonObject = new JSONObject(jsonRawData);
        // 第一步:先获取嵌套的daily对象
        JSONObject dailyObject = jsonObject.getJSONObject("daily");
        // 第二步:从daily对象里取出data数组
        JSONArray jsonArray = dailyObject.getJSONArray("data");
        
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject data = jsonArray.getJSONObject(i);
            String summary = data.getString("summary");
            tvSummary.append(summary);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

额外小建议

为了让代码更健壮,你可以添加一些空值检查,避免因为JSON结构变化或者缺失字段导致异常,比如:

private void jsonParse() {
    String jsonRawData = tvForecast.getText().toString();
    try {
        JSONObject jsonObject = new JSONObject(jsonRawData);
        // 检查daily对象是否存在
        if(jsonObject.has("daily")){
            JSONObject dailyObject = jsonObject.getJSONObject("daily");
            // 检查data数组是否存在且不为空
            if(dailyObject.has("data") && !dailyObject.isNull("data")){
                JSONArray jsonArray = dailyObject.getJSONArray("data");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject data = jsonArray.getJSONObject(i);
                    // 检查summary字段是否存在
                    if(data.has("summary")){
                        String summary = data.getString("summary");
                        tvSummary.append(summary);
                    }
                }
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

这样就算JSON里某些字段偶尔缺失,你的应用也不会轻易出问题啦~

内容的提问来源于stack exchange,提问作者Matthew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:55:14