【问题标题】:Get the lenght of a List<dynamic> in flutter在颤动中获取 List<dynamic> 的长度
【发布时间】:2020-02-10 11:54:04
【问题描述】:

我正在使用这样的 JSON:

{results: success, data: {total: 250, currentlyAvailable: 250, bestTimeToGo: 22, forecasts: [{hour: 21, available: 250}, {hour: 22, available: 24}, {hour: 23, available: 229}]}}

我解码了这个 JSON,并将结果转换为 MAP

var res = await http
    .get(Uri.encodeFull(link), headers: {"Accept": "application/json"});
if (res.statusCode == 200) {
  var data = json.decode(res.body);
  rest = data["data"] as Map;
  rest = rest["forecasts"]; //I have to work only with the "forecasts" section of the JSON

现在,我想知道这个“rest”元素列表的长度,否则我无法使用它们。

有什么想法吗?

【问题讨论】:

    标签: json list dictionary flutter dart


    【解决方案1】:

    列表具有length 属性。所以你应该能够做到这一点:

    final data = response["data"] as Map;
    final forecasts = data["forecasts"];
    print(forecasts.length);
    

    【讨论】:

    • 不,我已经试过了,它没有声明为列表,它不是列表而是地图,如果我尝试使用这种方法获取长度,我会得到这个错误:( NoSuchMethodError:类 '_InternalLinkedHashMap' 没有实例 getter 'lenght'。
    • 你真的需要重用rest变量吗?我更新了我的答案...
    【解决方案2】:

    您可以将rest 声明为动态的,如下所示:

    dynamic rest;
    

    您可以在dynamic 类型变量上调用任何方法。因此,如果rest 是一个列表,您可以使用rest.length 获得rest 的长度。


    但最好将 JSON 解析为对象。这里有一个简单的例子:

    how do I collect a loop through a list from http in JSON

    【讨论】:

    • 为什么这应该给我一个解决方案?
    • 它是一个 var(所以我认为它是同一件事),但我更新了我的代码,但它仍然不起作用: type '_InternalLinkedHashMap' is not a subtype of在类型转换中键入“列表”)
    • 尝试直接将预测分配给rest,而不是之前将地图分配给rest,像这样:rest = data["data"]["forecasts"]
    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2021-01-17
    • 2020-07-14
    • 2020-01-18
    • 2020-02-12
    • 1970-01-01
    • 2022-09-25
    • 2021-01-10
    相关资源
    最近更新 更多