【发布时间】:2021-11-12 00:31:56
【问题描述】:
我有一个 API 可以返回带有动态键的 JSON,即每次 GET 请求时键值都会发生变化。
例如:这是 JSON 的格式。
我有一个飞镖模型,
class Book {
String id = "";
String title = "";
Book();
Book.fromJson(Map<String, dynamic> json) {
id = json['id'];
title = json['title'];
}
static List<Book> listFromJson(List<dynamic> json) {
return json.map((val) => Book.fromJson(val)).toList();
}
}
和 JSON 响应,
{
"Recommended For You" : [
{
"id" : "001",
"title" : "title001"
},
...
],
"Thrillers" : [
{
"id" : "005",
"title" : "title005"
},
...
]
}
鉴于类型(如Thrillers)可以改变(即它是动态的并且可能因每个用户而改变),如何根据类型将其解析为书籍列表?
编辑 1
Thrillers 和 Recommended For You 不是恒定的,有时可能会更改为 Horror 和 Romantic 或其他内容。它是动态的
编辑 2:解决方案
感谢@lrn 的解决方案,我想出了一个新的类
class Recommendations {
String recommendationType;
List<Book> recommendations;
@override
String toString() {
return 'Recomendations[title: $recommendationType]';
}
Recommendations.fromJson(MapEntry<String, dynamic> json) {
if (json == null) return;
this.recommendationType = json.key;
this.recommendations = Book.listFromJson(json.value);
}
static List<Recommendations> listFromJson(Map<String, dynamic> json) {
return json == null
? List<Recommendations>.empty()
: json.entries
.map((value) => new Recommendations.fromJson(value))
.toList();
}
}
【问题讨论】:
标签: json flutter dart serialization deserialization