如何编写解析此 JSON 的 Dart 模型类?

Posted

技术标签:

【中文标题】如何编写解析此 JSON 的 Dart 模型类?【英文标题】:How do I write a Dart model class which parses this JSON? 【发布时间】:2020-12-31 17:20:21 【问题描述】:

我正在开发一个 dart / flutter 应用程序,我需要从 firebase 数据库中解析 JSON。我已经在我的代码中成功完成了多次,但我无法解析以下 JSON。有人可以帮忙吗?

这是我正在使用的 JSON 响应:

favorites: -MH1vwWPqXHSXkTe_MxC: [Green Bay Packers, Washington Football Team], firstname: Mark, email: mbilner@gmail.com, lastname: bilner, username: mbil

这是我的模型类:

class userProf 
  String email;
  String firstname;
  String lastname;
  String username;
  List<String> favorites;

  userProf(this.email, this.firstname, this.lastname, this.username, this.favorites);

  factory userProf.fromJson(Map<dynamic, dynamic> parsedJson) 
    var favsFromJson = parsedJson['favorites'];
    List<String> favsList = new List<String>.from(favsFromJson);


    return userProf(
        email: parsedJson['email'],
        firstname: parsedJson['firstname'],
        lastname: parsedJson['lastname'],
        username: parsedJson['username'],
        favorites: favsList
    );
  

当前代码给了我以下错误: “未处理的异常:类型 '_InternalLinkedHashMap' 不是类型 'Iterable' 的子类型”

这是它在数据库中的结构:

【问题讨论】:

那甚至不是有效的 json,不是吗? @OldProgrammer 他们显示的“JSON”输出很可能是在他们解码然后打印解码器返回的地图之后。 在这里查看我的答案:- ***.com/a/62888773/8388068 【参考方案1】:

您可以在此https://app.quicktype.io/ 网络中为任何语言转换任何 json 数据,请尝试 :)

【讨论】:

我对课程做了一个小修改,但这很有效。谢谢!【参考方案2】:

我认为 List 'from' 方法需要一个 Iterable 值,但 'favorites' 值是 'Map'。

List<String> favsList = new List<String>.from(favsFromJson);

如果你只使用没有键的 Map 值,你可以喜欢下面。

List<String> favsList = [];
favsFromJson.values((value) => favList += value);

【讨论】:

以上是关于如何编写解析此 JSON 的 Dart 模型类?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dart 语言解析嵌套 JSON 数组并将其放入模型类中

如何在 dart 中解析动态 JSON 键

如何从 json 中获取 int 并将其解析为 dart 中的 bool?

Dart null 安全性和使用 json_serializable 将 JSON 解析为模型

将 JSON 解析为 Dart 中的列表

如何在 dart Parse Json 中使用类作为数据类型