【问题标题】:How do you serialize/parse a nested JSON array in Flutter/Dart if it has no name/key如果 Flutter/Dart 中没有名称/键,如何序列化/解析嵌套的 JSON 数组
【发布时间】:2019-09-21 12:28:14
【问题描述】:

我正在使用一个 RESTful API,该 API 似乎在其他应用程序中工作和使用,它给了我这样的东西:

 "notes": [
    [
      {
        "automaticNote": false,
        "contactId": 0,
        "caseFileId": 0,
        "dateCreated": "2019-05-02",
        "deletedTime": "2019-05-02T19:31:54.588Z"
      }
    ]
  ]

双方括号意味着一对方括号没有与之关联的名称/键。更糟糕的是,notes 本身嵌套在一些复杂的 JSON 中。

我尝试使用JSON to Dart,但它会引发错误。所以我的问题是,如何序列化没有键/名称的 JSON 数组?

我通常会这样做:

    class Note {
  bool automaticNote;
  int contactId;
  int caseFileId;
  String dateCreated;
  String deletedTime;

  Note(
      {this.automaticNote,
      this.contactId,
      this.caseFileId,
      this.dateCreated,
      this.deletedTime});

  Note.fromJson(Map<String, dynamic> json) {
    automaticNote = json['automaticNote'];
    contactId = json['contactId'];
    caseFileId = json['caseFileId'];
    dateCreated = json['dateCreated'];
    deletedTime = json['deletedTime'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['automaticNote'] = this.automaticNote;
    data['contactId'] = this.contactId;
    data['caseFileId'] = this.caseFileId;
    data['dateCreated'] = this.dateCreated;
    data['deletedTime'] = this.deletedTime;
    return data;
  }
}

但是双 JSON 数组让我感到厌烦(同样,notes 本身嵌套在一个更复杂的 JSON 对象中,但为了简单起见,我没有在此处包含全部内容)。

谢谢!

【问题讨论】:

    标签: json parsing serialization dart flutter


    【解决方案1】:

    解码后,notes 像往常一样是一些Map&lt;String, dynamic&gt; 的成员。我们称之为m

    所以m['notes'] 是一个列表,谁是第一个成员,m['notes'][0] 也是一个列表。它的第一个成员m['notes'][0][0] 是另一个Map&lt;String, dynamic&gt;,这是您的构造函数所需要的。

    因此您应该能够使用:

    Note n = Note.fromJson(m['notes'][0][0]);
    

    【讨论】:

    • 哇,我想这可能会解决它!我会试一试,让你知道。非常感谢!
    【解决方案2】:

    我们以你自动保存笔记为例;

    automaticNote = json['notes'][0][0]['automaticNote'];

    这为注释提供了键,该数组具有一个数组,其中您的数据位于第一个点或索引 0(注释因此为 [0]),并且在该数组中还有另一个数组包含您的数据。同样,它是第一个数组项,因此 [0],然后您最终处于数据级别,因此您可以使用您的 key 进行自动注释,['automaticNote']。

    Note.fromJson(Map<String, dynamic> json) {
        automaticNote = json[0][0]['automaticNote'];
        contactId = json[0][0]['contactId'];
        caseFileId = json[0][0]['caseFileId'];
        dateCreated = json[0][0]['dateCreated'];
        deletedTime = json[0][0]['deletedTime'];
      }
    

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2020-01-08
      • 2021-02-09
      • 1970-01-01
      • 2019-12-30
      • 2021-02-25
      • 1970-01-01
      • 2019-01-29
      • 2021-05-13
      相关资源
      最近更新 更多