【问题标题】:json array in Dart getting range error in positions higher than 0Dart中的json数组在高于0的位置获得范围错误
【发布时间】:2019-10-30 06:47:24
【问题描述】:

我试图到达数组的位置 1,但在颤振飞镖中出现范围错误 0:1。

我尝试了各种方法来 json.decode(data) 但我不断收到以下错误,

[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理异常:RangeError(索引):无效值:只有有效值为0:1

{
    "location": {8 items},
    "current": {23 items},
    "forecast": {
        "forecastday": [
                    {
                        "date": "2019-06-16",
                        "date_epoch": 1560643200,
                        "day": {15 items},
                        "astro": {6 items},
                        "hour": [24 items]
                    },
                    {
                        "date": "2019-06-17",
                        "date_epoch": 1560729600,
                        "day": {15 items},
                        "astro": {6 items},
                        "hour": [24 items]
                    }
                ]
        }
}
import 'dart:convert';
import 'dart:async';


Future<void> getData() async {
    http.Response response = await http.get('https://api.xyz'); // ( See the json copied above)

    if (response.statusCode == 200) {
      String data = response.body;


      var decodedData = json.decode(data);
      Map dataJ = json.decode(data);


      List fc = dataJ['forecast']['forecastday'];
      var fcc = decodedData['forecast']['forecastday'];

      print(fc[0]['date']); // works
      print(fcc[0]['date']); // works
      print(json.decode(data)['forecast']['forecastday'][0]['date']); // works

      print(fc[1]['date']); // Fails range error expects 0 got 1
      print(fcc[1]['date']); // Fails range error expects 0 got 1
      print(json.decode(data)['forecast']['forecastday'][1]['date']); // Fails range error expects 0 got 1

      // -> [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: RangeError (index): Invalid value: Only valid value is 0: 1


    } else {
      print(response.statusCode);
    }
  }

我期望得到的是接下来几天的日期而不是错误。

我还可以进一步通过数组(仍然在预测日 0 位置)它有效。如果我将 forecastday 更改为高于 0 的值,它会失败吗?

print(fc[0]['hour'][4]['wind_dir']);

【问题讨论】:

  • 它适用于所有情况。你检查响应数据了吗?
  • 感谢您的回复。响应数据在那里。不过,它确实在控制台中被缩短了,在 android studio 中,因为我只打印结果。不确定这是不是预期的行为。
  • 如果您print(fcc) 会发生什么?是否显示:[Instance of Map, Instance of Map,...]
  • 如果我打印 fcc 我没有收到该消息,我会收到一些 json。从此开始。 [{日期:2019-06-16,date_epoch:1560643200 ....
  • 如果我尝试获取 forecastday 的 .length 它返回 1 而不是 2。我不知道为什么。打印结果是否有可能导致问题的最大字符限制或文件大小?

标签: arrays json flutter dart


【解决方案1】:

问题是 URL 中的天变量,它是双精度数而不是整数。这导致响应只有当天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多