根据我的评论,我建议您使用代码生成库来解析JSON
to JSON Models
.
Read 本文解释您如何使用(例如)json_serialized包裹。
此类库承担生成所有样板代码的所有肮脏工作创建您的模型类并由他们负责null
值是否强制。
例如,如果您像这样注释一个 Person 类:
@JsonSerializable(nullable: true)
class Person {
final String firstName;
final String lastName;
final DateTime dateOfBirth;
Person({this.firstName, this.lastName, this.dateOfBirth});
factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
Map<String, dynamic> toJson() => _$PersonToJson(this);
}
with (nullable: true
)模型的 dart 类将跳过空值字段。
UPDATE
因为我渴望我所给予的技术快速打字工具(由 Christoph Lachenicht 建议)尝试使用您的示例。
我准备了一个mock api和一个文件example.json
提供您发布的 JSON。我只取了一个元素,而不是数组。你可以在这里看看示例.json.
安装 QuickType 后,我生成了此 json 的模型类:
quicktype --lang dart --all-properties-optional example.json -o example.dart
这里注意一下cli参数--all-properties-optional
为缺失字段创建空检查。
Map<String, dynamic> toJson() => {
"id": id == null ? null : id,
"date": date == null ? null : date,
"title": title == null ? null : title.toJson(),
"content": content == null ? null : content.toJson(),
"excerpt": excerpt == null ? null : excerpt.toJson(),
"author": author == null ? null : author,
"featured_media": featuredMedia == null ? null : featuredMedia,
"_links": links == null ? null : links.toJson(),
"_embedded": embedded == null ? null : embedded.toJson(),
};
然后我在中使用了示例类example.dart
var jsonExampleResponse =
await http.get('https://www.shadowsheep.it/so/53962129/testjson.php');
print(jsonExampleResponse.body);
var exampleClass = exampleFromJson(jsonExampleResponse.body);
print(exampleClass.toJson());
一切都很顺利。
N.B.当然,当您使用此类时,您必须在使用它们之前检查其字段是否为空:
print(exampleClass.embedded?.wpFeaturedmedia?.toString());
就这样。我希望能让你走上正确的方向。