【问题标题】:JSONDecode of a list of maps地图列表的 JSONDecode
【发布时间】:2020-10-01 15:40:13
【问题描述】:

我有一个来自通过变量res 的 api 调用的映射列表,如下所示:[{"var":"val"},{"var":"val"}]。

当我尝试将正文从 json 解码为 dart 列表时,我收到 List<Dynamic> 不是 List<Map<String, Dynamic>> 的子类型的错误。

final List<Map<String, dynamic>> decoded = jsonDecode(res.body) as List<Map<String, dynamic>>;

如何将 JSON 字符串格式化为地图列表?

【问题讨论】:

    标签: json flutter


    【解决方案1】:

    您不需要列表。我最终得到了以下标签列表的工作代码(在此示例中,标签指向数据类):

    class TaskTags {
      var tagDict = Map<String, TaskTag>();
      TaskTags({this.tagDict});
    
      factory TaskTags.fromJson(Map<String, dynamic> json){
        var innerMap = json['tagDict'];
        var tagMap = Map<String, TaskTag>();
        innerMap.forEach((key, value) {
          tagMap.addAll({key: TaskTag.fromJson(value)});
        });
        return new TaskTags(
          tagDict: tagMap,
        );
      }
    }
      }
    }
    

    【讨论】:

    • 我从 API 响应中获取了列表,因为列表中有多个对象。
    • 啊,我并没有真正注意到传入的结构。作为错误状态,您收到的是一个简单的值列表,而不是值映射。所以删除Map。结构是[{"name": "Jim"}] 而不是"name" : { "Jim" : {"city" : "NYC"}}
    • 很遗憾没有,因为我真的收到了一张地图列表。我最终首先将 JSON 字符串解码为 List&lt;Dynamic&gt;,然后遍历每个条目并将其转换为 &lt;Map&lt;String, Dynamic&gt; 对象。这不是很好,但至少它正在工作。
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多