如果 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<String, dynamic>
的成员。我们称之为m
。
所以m['notes']
是一个列表,谁是第一个成员,m['notes'][0]
也是一个列表。它的第一个成员m['notes'][0][0]
是另一个Map<String, dynamic>
,这是您的构造函数所需要的。
因此您应该能够使用:
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)如何在点击应用程序时将副本添加到剪贴板?