如何解决使用 Flutter 和 Dio 解析 json 文件
在此函数中,我发出 POST 请求以从 API 获取信息。我得到一个 json 文件作为回报,我只是想知道如何解析 json 文件以转换为对象。
在我的代码中,我怎么说只打印 json 文件中每个项目的“分数”值?或创建一个植物 ID 对象?我不知道如何让它们连接起来。
这是我目前的代码:
这是调用API请求的函数
Future<PlantId> upload({String imageFile,String imagePath}) async {
String apiKey = "2b10SIEW7oBMIMc6FWThazVk";
FormData formData = new FormData.fromMap({
"organs": "flower","images": await MultipartFile.fromFile(imagePath,filename: imageFile,contentType: new MediaType("images","png"))
});
Dio dio = new Dio();
Response response = await dio.post("https://my-api.plantnet.org/v2/identify/all?api-key=" + apiKey,data: formData,options: Options());
int statusCode = response.statusCode;
print (statusCode);
if (statusCode == 200) {
print("status code: " + statusCode.toString() + "... it worked!");
final jsonResponse = jsonDecode(response.toString());
print (jsonResponse);
return PlantId.fromJson(jsonResponse);
}
else{
print("error status code: " + statusCode.toString() + " ... :(");
}
}
这是我必须解析json文件的类
class PlantId {
PlantId({
this.language,this.results,});
String language;
List<Result> results;
factory PlantId.fromJson(Map<String,dynamic> json) => PlantId(
language: json["language"],results: List<Result>.from(json["results"].map((x) => Result.fromJson(x))),);
Map<String,dynamic> toJson() => {
"language": language,"results": List<dynamic>.from(results.map((x) => x.toJson())),};
}
class Result {
Result({
this.score,this.species,});
double score;
Species species;
factory Result.fromJson(Map<String,dynamic> json) => Result(
score: json["score"].toDouble(),species: Species.fromJson(json["species"]),dynamic> toJson() => {
"score": score,"species": species.toJson(),};
}
class Species {
Species({
this.scientificNameWithoutAuthor,this.scientificNameAuthorship,this.genus,this.family,this.commonNames,});
String scientificNameWithoutAuthor;
String scientificNameAuthorship;
Family genus;
Family family;
List<String> commonNames;
factory Species.fromJson(Map<String,dynamic> json) => Species(
scientificNameWithoutAuthor: json["scientificNameWithoutAuthor"],scientificNameAuthorship: json["scientificNameAuthorship"],genus: Family.fromJson(json["genus"]),family: Family.fromJson(json["family"]),commonNames: List<String>.from(json["commonNames"].map((x) => x)),dynamic> toJson() => {
"scientificNameWithoutAuthor": scientificNameWithoutAuthor,"scientificNameAuthorship": scientificNameAuthorship,"genus": genus.toJson(),"family": family.toJson(),"commonNames": List<dynamic>.from(commonNames.map((x) => x)),};
}
class Family {
Family({
this.scientificNameWithoutAuthor,});
String scientificNameWithoutAuthor;
String scientificNameAuthorship;
factory Family.fromJson(Map<String,dynamic> json) => Family(
scientificNameWithoutAuthor: json["scientificNameWithoutAuthor"],};
}
这是我正在使用的示例 json 响应:
{
"query": {
"project": "best","images": [
"0a942848b4ae052a89e82b2d31a89ffd"
],"organs": [
"flower"
]
},"language": "en","preferedReferential": "the-plant-list","results": [
{
"score": 0.9777618646621704,"species": {
"scientificNameWithoutAuthor": "Echinopsis chamaecereus","scientificNameAuthorship": "H.Friedrich & Glaetzle","genus": {
"scientificNameWithoutAuthor": "Echinopsis","scientificNameAuthorship": ""
},"family": {
"scientificNameWithoutAuthor": "Cactaceae","commonNames": [
"Peanut Cactus"
]
},"gbif": {
"id": "5623114"
}
},{
"score": 0.00500953895971179,"species": {
"scientificNameWithoutAuthor": "Echinocereus poselgeri","scientificNameAuthorship": "Lem.","genus": {
"scientificNameWithoutAuthor": "Echinocereus","commonNames": [
"Dahlia Apple Cactus","Dahlia Hedgehog Cactus"
]
},"gbif": {
"id": "3084136"
}
}
],"remainingIdentificationRequests": 46
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。