如何从 API 获取数据,当 API 的数据作为 map<dynamic , dynamic>。如果数据为 DoctorModel 里面有 daysModel,里面的 daysModel 就是 workTimeModel

how to get data from API, when data of API as map<dynamic , dynamic>. if data as DoctorModel inside it daysModel, inside daysModel is workTimeModel

我想从API获取数据,我的API数据是DoctorModel里面的daysModel,daysModel里面是workTimeModel,每个医生有很多天,有工作时间。

试了很多方法还是没解决

注意:我 API 来自这个网站 https://app.quicktype.io/

我获取 API 数据的代码:

Response res = await get(
      doctorsUrl ,
    );
    if (res.statusCode == 200) {
      var body = jsonDecode(res.body);
      List<dynamic> data = body['data'];
      List<DoctorInfoModel> doctors =  data.map((dynamic item) => DoctorInfoModel.fromJson(item)).toList();
      return doctors;
    }

我的API:

{
        "id": 15,
        "name": "Prof. Elton Quigley",
        "about": "uHiKeKA1gq",
        "stars": 5,
        "location": "R59lmj1eud",
        "latitude": 5,
        "longitude": 5,
        "notes": "yCl95VqUAz",
        "days": [
            {
                "name": "سبت",
                "pivot": {
                    "doctor_id": 15,
                    "day_id": 1,
                    "morning": "1",
                    "evening": "1"
                }
            },
            {
                "name": "أحد",
                "pivot": {
                    "doctor_id": 15,
                    "day_id": 2,
                    "morning": "3",
                    "evening": "3"
                }
            },
            {
                "name": "إثنين",
                "pivot": {
                    "doctor_id": 15,
                    "day_id": 3,
                    "morning": "5",
                    "evening": "5"
                }
            },
            {
                "name": "ثلاثاء",
                "pivot": {
                    "doctor_id": 15,
                    "day_id": 4,
                    "morning": "4",
                    "evening": "4"
                }
            },
            {
                "name": "أربعاء",
                "pivot": {
                    "doctor_id": 15,
                    "day_id": 5,
                    "morning": "5",
                    "evening": "5"
                }
            },
            {
                "name": "خميس",
                "pivot": {
                    "doctor_id": 15,
                    "day_id": 6,
                    "morning": "4",
                    "evening": "4"
                }
            }
        ]
    }

我的 DoctorModel:

// To parse this JSON data, do
//
//     final doctorInfoModel = doctorInfoModelFromJson(jsonString);

import 'dart:convert';

DoctorInfoModel doctorInfoModelFromJson(String str) => DoctorInfoModel.fromJson(json.decode(str));

String doctorInfoModelToJson(DoctorInfoModel data) => json.encode(data.toJson());

class DoctorInfoModel {
    DoctorInfoModel({
        this.id,
        this.name,
        this.about,
        this.stars,
        this.location,
        this.latitude,
        this.longitude,
        this.notes,
        this.days,
    });

    int id;
    String name;
    String about;
    int stars;
    String location;
    int latitude;
    int longitude;
    String notes;
    List<Day> days;

    factory DoctorInfoModel.fromJson(Map<String, dynamic> json) => DoctorInfoModel(
        id: json["id"],
        name: json["name"],
        about: json["about"],
        stars: json["stars"],
        location: json["location"],
        latitude: json["latitude"],
        longitude: json["longitude"],
        notes: json["notes"],
        days: List<Day>.from(json["days"].map((x) => Day.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "name": name,
        "about": about,
        "stars": stars,
        "location": location,
        "latitude": latitude,
        "longitude": longitude,
        "notes": notes,
        "days": List<dynamic>.from(days.map((x) => x.toJson())),
    };
}

class Day {
    Day({
        this.name,
        this.pivot,
    });

    String name;
    Pivot pivot;

    factory Day.fromJson(Map<String, dynamic> json) => Day(
        name: json["name"],
        pivot: Pivot.fromJson(json["pivot"]),
    );

    Map<String, dynamic> toJson() => {
        "name": name,
        "pivot": pivot.toJson(),
    };
}

class Pivot {
    Pivot({
        this.doctorId,
        this.dayId,
        this.morning,
        this.evening,
    });

    int doctorId;
    int dayId;
    String morning;
    String evening;

    factory Pivot.fromJson(Map<String, dynamic> json) => Pivot(
        doctorId: json["doctor_id"],
        dayId: json["day_id"],
        morning: json["morning"],
        evening: json["evening"],
    );

    Map<String, dynamic> toJson() => {
        "doctor_id": doctorId,
        "day_id": dayId,
        "morning": morning,
        "evening": evening,
    };
}

如何正确获取数据?

我想出了如何获取数据。

我替换了这两行:

List<dynamic> data = body['data'];
List<DoctorInfoModel> doctors =  data.map((dynamic item) => DoctorInfoModel.fromJson(item)).toList();

通过这些:

var data = body['data'];
DoctorInfoModel doctorInfo = DoctorInfoModel.fromJson(data);

当我的DoctorInfoModel不是List,所以我删除它。

获取API数据的正确代码:

 if (res.statusCode == 200) {
      var body = jsonDecode(res.body);
      var data = body['data'];
      DoctorInfoModel doctorInfo = DoctorInfoModel.fromJson(data);
      print(doctorInfo.name);
      print(doctorInfo.about);
      print(doctorInfo.days[0].name);
      print(doctorInfo.days[0].pivot.morning);
      return doctorInfo;
    }