我正在努力学习颤振,但我在JSON序列化上被卡住了。我在YouTube和Flitter文档中学习了一些教程,但我在序列化方面遇到了一些困难。你能帮我一点忙吗,这是为了教育目的,所以我更感兴趣的是背后的理论,而不是解决方案本身,然而,即使只有解决方案,我认为我可以尝试理解这个过程。我应该提到,我知道这一点,但在我的例子中,数据中有嵌套对象,这让我感到困惑。
作为响应数据的样本,它基本上是一个商店,每天他们都有一个开张日期的列表,每个对象(天)都有开张时间和日期。
{
"data": [
{
"openTime": {
"open": "10:00",
"close": "20:00"
},
"date": {
"gregorian": {
"day": "01",
"weekday": {
"en": "Friday",
"de": "Freitag"
},
"month": {
"number": 5,
"en": "May",
"de": "Mai"
},
"year": "2020"
}
}
},
{
"openTime": {
"open": "12:00",
"close": "18:00"
},
"date": {
"gregorian": {
"day": "02",
"weekday": {
"en": "Saturday",
"de": "Samstag"
},
"month": {
"number": 5,
"en": "May",
"de": "Mai"
},
"year": "2020"
}
}
}
]
}
获取数据的函数:
Future<Mall> fetchData() async {
final response = await http.get(url);
if (response.statusCode == 200) {
return Mall.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to load data!');
}
}
我的班级购物中心有开放时间
和日期
,我想这是我的问题所在。
class Mall {
final dynamic openTime;
final dynamic date;
Mall({this.openTime, this.date});
factory Mall.fromJson(Map<String, dynamic> json) {
return Mall(openTime: json['openTime'], date: json['date']);
}
}
我尝试生成的结果应该是这样的,这样我就可以遍历数据列表并构建一张卡片,持续数天(例如,最后7天)
var time = [
{
"openTime": {"open": "10:00", "close": "20:00"},
"date": "01 May 2020"
},
{
"openTime": {"open": "12:00", "close": "18:00"},
"date": "02 May 2020"
},
];
我得到的错误是:
type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
如果你需要更多的细节,请告诉我。提前谢谢。
您的代码中有一些错误。
1-在这一部分中,您的响应是容器中名为“数据”的对象
Future<Mall> fetchData() async {
final response = await http.get(url);
if (response.statusCode == 200) {
return Mall.fromJson(json.decode(response.body)); //here
} else {
throw Exception('Failed to load data!');
}
}
2你的商城数据是嵌套对象中的数据,所以自定义你的商城类
class Mall {
List<Datum> data;
Mall({
this.data,
});
factory Mall.fromJson(Map<String, dynamic> json) => Mall(
data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"data": List<dynamic>.from(data.map((x) => x.toJson())),
};
}
class Datum {
OpenTime openTime;
Date date;
Datum({
this.openTime,
this.date,
});
factory Datum.fromJson(Map<String, dynamic> json) => Datum(
openTime: OpenTime.fromJson(json["openTime"]),
date: Date.fromJson(json["date"]),
);
Map<String, dynamic> toJson() => {
"openTime": openTime.toJson(),
"date": date.toJson(),
};
}
class Date {
Gregorian gregorian;
Date({
this.gregorian,
});
factory Date.fromJson(Map<String, dynamic> json) => Date(
gregorian: Gregorian.fromJson(json["gregorian"]),
);
Map<String, dynamic> toJson() => {
"gregorian": gregorian.toJson(),
};
}
class Gregorian {
String day;
Weekday weekday;
Month month;
String year;
Gregorian({
this.day,
this.weekday,
this.month,
this.year,
});
factory Gregorian.fromJson(Map<String, dynamic> json) => Gregorian(
day: json["day"],
weekday: Weekday.fromJson(json["weekday"]),
month: Month.fromJson(json["month"]),
year: json["year"],
);
Map<String, dynamic> toJson() => {
"day": day,
"weekday": weekday.toJson(),
"month": month.toJson(),
"year": year,
};
}
class Month {
int number;
String en;
String de;
Month({
this.number,
this.en,
this.de,
});
factory Month.fromJson(Map<String, dynamic> json) => Month(
number: json["number"],
en: json["en"],
de: json["de"],
);
Map<String, dynamic> toJson() => {
"number": number,
"en": en,
"de": de,
};
}
class Weekday {
String en;
String de;
Weekday({
this.en,
this.de,
});
factory Weekday.fromJson(Map<String, dynamic> json) => Weekday(
en: json["en"],
de: json["de"],
);
Map<String, dynamic> toJson() => {
"en": en,
"de": de,
};
}
class OpenTime {
String open;
String close;
OpenTime({
this.open,
this.close,
});
factory OpenTime.fromJson(Map<String, dynamic> json) => OpenTime(
open: json["open"],
close: json["close"],
);
Map<String, dynamic> toJson() => {
"open": open,
"close": close,
};
}
现在,您可以像以前一样查看购物中心数据
Future<Mall> fetchData() async {
final response = await http.get(url);
if (response.statusCode == 200) {
return Mall.fromJson(json.decode(response.body)); //here
} else {
throw Exception('Failed to load data!');
}
}
我知道我可以创建一个单独的Report类,然后使用@JSONProperty将其嵌入到ReportResponse中。有没有一种方法可以避免这种情况,并用一个注释标记ReportResponse类,将它映射到JSON中的“Report”元素?
问题内容: 此JSON输出来自MongoDB聚合查询。我本质上需要将嵌套数据JSON解析为以下’ 和值。 我尝试了5种不同的技术来从中获得所需的信息,但是使用和模块却遇到了问题。 理想情况下,输出将是这样的: 问题答案: 注意:来自MongoDB的JSON响应实际上无效。JSON需要双引号(),而不是单引号()。 我不确定为什么您的响应中有单引号而不是双引号,但是从其外观上,您可以替换它们,然后只
问题内容: 我正在尝试使用zippopotam.us获取特定城市的邮政编码。我有下面的代码可以正常工作,但是当我尝试访问返回的密钥时 完整的JSON输出: 谢谢你的帮助。 问题答案: 我没有意识到第一个嵌套元素实际上是一个数组。正确访问邮政编码密钥的方法如下:
问题内容: 动物是一种动物。猫和狗都是。 现在,我正在尝试并希望使用“类型”来获取子类。 但是类型字段不在列之内。 提前致谢 :) 问题是类型不符合动物{}。 如果类型在动物{}中,则代码将起作用。但这不是t): 问题答案: 可能,但是键入JSON应该看起来像(完全限定名称) Abstract类 子类 现在,对于json 这将是实例 和 这将是例如 编辑 在这种情况下使用。例 动物类 对于 它运作
问题内容: 我正在尝试从数据JSON获取值。我已经成功遍历了JSON数据,几乎满足了我的需求! 在Python中运行以下命令: 给我这个: 我只想获得价值。这是关键。 如何进一步执行命令以仅返回值? 问题答案: 这是完整的输出吗?这本字典包含带有嵌套字典的列表,因此您应该这样处理。假设它被称为: 您的第一个地址是对象,然后是字典中的键,列表中的索引以及该字典的键: 输出: 编辑:根据您所得到的然后
问题内容: 假设我有json数据,例如 现在我正在从该json数据访问字段,例如: 如何以最有效的方式从给定的json数据访问第三个字段()? 不起作用 一种可能是我使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢? 问题答案: 老实说,我无法理解您的问题。JSON已经结构化了,为什么需要更改结构? 在您的情况下,我将按以下方式访问它: 如果碰巧希望 遍历 数据,则需要: 更