我正在尝试使用express和mongodb从node.js中的REST API解析json数据,然后将其显示为userdata。问题是无论我尝试了什么,它都不会解析将抛出的数据和异常之类的数据 未处理的异常:NoSuchMethodError:类'_InternalLinkedHashMap'没有实例方法'cast'具有匹配的参数。 或仅显示空值。我正在尝试解析此json数据: {“ userData”:{“ _ id”:“ 5d3c29fdb1b0fd22182ae683”,“ personName”:“ Damian”,“ userIdentificationEMAIL”:“ dbonda@gmail.com”,“ dateofbirth”:“ 14.07.2000”,“ grad”:“丢失Angeles“,” postanskibroj“:” 2B“,” ulica“:” Jackovina“,” drzava“:” California“,” faiID“:” 123456789“,” nacionalniID“:” 000“},” request“:{”类型“:” GET“,” url“:” http://localhost:3000/products“}} 我只是不知道是否需要对json数据中的request字段进行实际操作,我不知道是否应将其忽略……有人评论说它是错误地提出要求的。另外,当从API获取数据时,我可以将整个userData放入数组中。
我尝试了quicktype,但无济于事,我尝试了很多示例和方法,这些方法都是从堆栈(通常是从网络)开始的,但是我什么也没找到。
我正在设法从API中获取数据,但未能真正进行解析,然后使用它向用户显示其数据。
// To parse this JSON data, do
//
// final userData = userDataFromJson(jsonString);
import 'dart:convert';
UserData userDataFromJson(String str) => UserData.fromJson(json.decode(str));
String userDataToJson(UserData data) => json.encode(data.toJson());
class UserData {
List<UserDatum> userData;
Request request;
UserData({
this.userData,
this.request,
});
factory UserData.fromJson(Map<String, dynamic> json) => new UserData(
userData: new List<UserDatum>.from(json["userData"].map((x) => UserDatum.fromJson(x))),
request: Request.fromJson(json["request"]),
);
Map<String, dynamic> toJson() => {
"userData": new List<dynamic>.from(userData.map((x) => x.toJson())),
"request": request.toJson(),
};
}
class Request {
String type;
String url;
Request({
this.type,
this.url,
});
factory Request.fromJson(Map<String, dynamic> json) => new Request(
type: json["type"],
url: json["url"],
);
Map<String, dynamic> toJson() => {
"type": type,
"url": url,
};
}
class UserDatum {
String id;
String personName;
String userIdentificationEmail;
String dateofbirth;
String iDPhoto;
String grad;
String postanskibroj;
String ulica;
String drzava;
String faiId;
String nacionalniId;
UserDatum({
this.id,
this.personName,
this.userIdentificationEmail,
this.dateofbirth,
this.iDPhoto,
this.grad,
this.postanskibroj,
this.ulica,
this.drzava,
this.faiId,
this.nacionalniId,
});
factory UserDatum.fromJson(Map<String, dynamic> json) => new UserDatum(
id: json["_id"],
personName: json["personName"],
userIdentificationEmail: json["userIdentificationEMAIL"],
dateofbirth: json["dateofbirth"],
iDPhoto: json["iDPhoto"],
grad: json["grad"],
postanskibroj: json["postanskibroj"],
ulica: json["ulica"],
drzava: json["drzava"],
faiId: json["faiID"],
nacionalniId: json["nacionalniID"],
);
Map<String, dynamic> toJson() => {
"_id": id,
"personName": personName,
"userIdentificationEMAIL": userIdentificationEmail,
"dateofbirth": dateofbirth,
"iDPhoto": iDPhoto,
"grad": grad,
"postanskibroj": postanskibroj,
"ulica": ulica,
"drzava": drzava,
"faiID": faiId,
"nacionalniID": nacionalniId,
};
}
我只需要解析数据并将其显示在列表或文本中,然后就可以将其放入变量中并在整个应用程序中使用它。 任何帮助是极大的赞赏。 谢谢。 干杯!
答案 0 :(得分:0)
您的syntax error
中有json data
。
我检查了您在问题中发布的数据。
尝试通过访问为您的课程生成飞镖代码 here
您将首先获得Autogenerated
类,然后获得子类。
编辑
您可以重命名Autogenerated
类,但请确保也通过以下方法对其进行更改
然后传递您的json数据,使其功能如下所述
fetchData() async{
Response response;
response = await get("yourURL");
var json = jsonDecode(response.body);
List<Autogenerated> _userDataList = Autogenerated.fromJson(json);
}
答案 1 :(得分:0)
将JSON文本更改为包含JSON数组后,您的代码应该可以使用。
按如下所示更改工厂构造函数会更为优雅:
factory UserData.fromJson(Map<String, dynamic> json) => UserData(
userData: json["userData"]
.map<UserDatum>((x) => UserDatum.fromJson(x))
.toList(),
request: Request.fromJson(json["request"]),
);
访问如下字段:
print(UserData.fromJson(decode).userData[0].dateofbirth);