【发布时间】:2022-01-11 11:45:11
【问题描述】:
我有一个颤振应用程序在某个时候检索一个列表/或任何与此相关的内容,如果请求有任何问题,则会收到不同的响应。
例如:
{
"status" : "success",
"message":
[
{
"updated_on" : "2022-01-09 14:26:07"
}
]
}
失败:
{
"status" : "error",
"message" : "Query not found"
}
使用quicktype.io,我创建了如下类:
class ResponseList {
ResponseList({
required this.status,
required this.message,
});
String status;
List<dynamic> message;
factory ResponseList.fromJson(Map<String, dynamic> json) => ResponseList(
status: json["status"],
message: List<dynamic>.from(json["message"].map((x) => CLASSNAME.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"status": status,
"message": List<dynamic>.from(message.map((x) => x.toJson())),
};
}
现在,问题是,在失败时,当我尝试调用 ResponseList responseAllFromJson(String str) => ResponseList.fromJson(json.decode(str)); 时出现异常,其中 exeption 显示为 [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'String' is not a subtype of type 'List<dynamic>'。
我希望有一个方法,首先检查状态,无论是成功还是失败,然后解析 json 的剩余部分(message)或解析整个 json 并返回适当的响应(失败时的文本和列表在成功的情况下对象)。
注意:我想要一个可重用的代码,这样我就可以将响应传递给该方法并从我的应用程序中的任何位置检索它。例如:
static bool responseStatus(dynamic response) {
if (response != null) {
if (responseListFromJson(response).status.trim().toLowerCase() == 'success') {
return true;
}
}
return false;
}
目前,上面会在失败时引发异常,但在成功时会顺利运行。
【问题讨论】:
-
CLASSNAME 只是将
List<dynamic>转换为适当的List<CLASSNAME>
标签: json flutter dart parsing json-api-response-converter