如果 Flutter/Dart 中没有名称/键,如何序列化/解析嵌套的 JSON 数组

Posted

技术标签:

【中文标题】如果 Flutter/Dart 中没有名称/键,如何序列化/解析嵌套的 JSON 数组【英文标题】:How do you serialize/parse a nested JSON array in Flutter/Dart if it has no name/key 【发布时间】: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 对象中,但为了简单起见,我没有在此处包含全部内容)。

谢谢!

【问题讨论】:

【参考方案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'];
  

【讨论】:

以上是关于如果 Flutter/Dart 中没有名称/键,如何序列化/解析嵌套的 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter Dart 中迭代 JSON Map 并检索键值结果?

Flutter(Dart)如何在点击应用程序时将副本添加到剪贴板?

如何禁用 Flutter/Dart 实验?

如何访问和更改在 FLUTTER/DART 的另一个类中声明的字符串变量的值

Flutter/Dart:如何访问地图/对象中的单个条目

在 Flutter(Dart)中将字符串解析为 DateTime [重复]