首页 > 解决方案 > 如何显示嵌套的 JSON 数据?

问题描述

我正在尝试DietNameData{}||显示 PartnerName来自PartnerData[]|| DayNameDayList[]. 作为另一个 ArrayList 数据中的那些数据,我面临着显示这些数据的正确语法的问题。

{
    "Status": "1",
    "Message": "",
    "Data": {
        "EncDietId": "pEl2B9kuumKRxIxLJO76eQ==",
        "DietName": "dietcian2",
        "Email": null,
        "Phone": null,
        "AlternatePhone": null,
        "Image": "http://mypain/Doctor/65AUEYyryTD2UKBRV.jpg",
        "Description": null,
        "Fee": null,
        "DiscountedFee": null,
        "BookingFee": null,
        "VisitDay": null,
        "TimeFrom": null,
        "TimeTo": null
    },
    "PartnerData": [
        {
            "PartnerId": "13",
            "EncPartnerId": "65gtodyhbtdInTsJWr1ZkA==",
            "PartnerName": "Rasomoy pvt. Hospital",
            "PartnerAddress": "Kol,Kol,Kol,Wb",
            "Fee": "1200",
            "DiscountedFee": "900",
            "BookingFee": "500",
            "DayList": [
                {
                    "DayName": "Wednesday",
                    "TimeFrom": "10:00",
                    "TimeTo": "16:00"
                },
                {
                    "DayName": "Friday",
                    "TimeFrom": "10:00",
                    "TimeTo": "16:00"
                },
                {
                    "DayName": "Saturday",
                    "TimeFrom": "10:00",
                    "TimeTo": "16:00"
                }
            ]
        }
    ]
}

我的 API 函数。

 Future<List<PartnerDatum>> dietcianDetailsApi() async {
var jsonResponse;

  var response = await http.post(
      Uri.parse("http://myapin/api/api/DietDetails"),
      body: ({
        'EncId ': pEl2tetIxLJO76eQ== //(encDietcianIdRef)
      }));
  if (response.statusCode == 200) {
    print("Correct");
    print(response.body);
    jsonResponse = json.decode(response.body.toString());
    print(jsonResponse);
      DietDetailsModel dataModel = dietDetailsModelFromJson(response.body);
    print(dataModel.partnerData.length);
    for (final item in dataModel.partnerData) 
    print(item.partnerName);

    List<PartnerDatum> arrData =dataModel.partnerData; 
    print(arrData[1].partnerName);
    return arrData;

  } else {
    print("Wrong Url");
    print(response.body);
    throw Exception("Faild to fetch");
  }
  //return AllDietician();
}

尝试在 ListView builder 中打印我的 JSON 数据。

 Container(
                  height: blockSizeVertical*30,//38
                  //color: Colors.blueAccent,
                  child: FutureBuilder(
                    future: dietcianDetailsApi(),
                    builder: (BuildContext context, AsyncSnapshot snapshot) {
                      // if (snapshot.connectionState !=ConnectionState.done) {
                      //   return CircularProgressIndicator();
                      // }
                      if (snapshot.hasError) {
                        return Text("Somthing went wrong");
                      }

                      if (snapshot.hasData) {
                        return ListView.builder(
                             scrollDirection: Axis.horizontal,
                              physics: BouncingScrollPhysics(),
                            shrinkWrap: true,
                            itemCount: snapshot.data.length,
                            itemBuilder: (BuildContext context, int index) =>
                              Container(
                                decoration: BoxDecoration(
                                color: Colors.white,
                                borderRadius: BorderRadius.circular(10),
                              ),
                              width: blockSizeHorizontal*80,
                              margin: EdgeInsets.all(10),

                              child: Stack(children: [
                    Column(
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                        SizedBox(height: blockSizeVertical*0.5),



                          Text(
                            '${snapshot.data[index].partnerName}',
                            style: TextStyle(
                              fontWeight: FontWeight.bold,
                              fontSize: blockSizeHorizontal*3.5,
                              fontFamily: 'Poppins',
                              color: Theme.of(context).primaryColor,
                            ),
                            textAlign: TextAlign.center,
                          ),
                           SizedBox(height: blockSizeVertical*0.8),

                            Container(
                          padding: EdgeInsets.symmetric(horizontal: 10),
                          child: Center(
                            child: Text(
                              'PartnerAddress : ${snapshot.data[index].partnerAddress} Fee: ${snapshot.data[index].fee} || DiscountedFee: ${snapshot.data[index].discountedFee} ',//put email
                              style: TextStyle(
                                  fontFamily: 'Poppins',
                                  fontSize: blockSizeHorizontal*2.5,
                                  color: Theme.of(context).primaryColor),
                              textAlign: TextAlign.center,
                              maxLines: 4,
                            ),
                          ),
                        ),
                        ]
                        
                        ),
                    Positioned(
                      bottom: 5,
                      left: 2,
                      child: Padding(
                       padding: const EdgeInsets.only(left:15.0, bottom: 5),
                        child: InkWell(
                          onTap: () {
                           
                          },
                          child: Container(
                            alignment: Alignment.center,
                            height: blockSizeVertical*5,
                            width: blockSizeHorizontal*30,
                            decoration: BoxDecoration(
                              shape: BoxShape.rectangle,
                              borderRadius: BorderRadius.circular(10),
                              gradient: LinearGradient(
                                begin: Alignment.topLeft,
                                end: Alignment.topRight,
                                colors: [
                                  Theme.of(context).primaryColor,
                                  Theme.of(context).accentColor
                                ],
                              ),
                            ),
                            child: Text(
                              'Show Details',
                              style: TextStyle(
                                color: Colors.white,
                                fontSize: blockSizeHorizontal*2.7,
                                fontWeight: FontWeight.bold,
                                fontFamily: 'Poppins',
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                  ]),





                  ),
                );
              }
                      return Text("Error while calling");
                    },
                  ),
                ),

我的模型课

import 'package:meta/meta.dart';
import 'dart:convert';

DietDetailsModel dietDetailsModelFromJson(String str) => DietDetailsModel.fromJson(json.decode(str));

String dietDetailsModelToJson(DietDetailsModel data) => json.encode(data.toJson());

class DietDetailsModel {
    DietDetailsModel({
        required this.status,
        required this.message,
        required this.data,
        required this.partnerData,
    });

    String status;
    String message;
    Data data;
    List<PartnerDatum> partnerData;

    factory DietDetailsModel.fromJson(Map<String, dynamic> json) => DietDetailsModel(
        status: json["Status"],
        message: json["Message"],
        data: Data.fromJson(json["Data"]),
        partnerData: List<PartnerDatum>.from(json["PartnerData"].map((x) => PartnerDatum.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "Status": status,
        "Message": message,
        "Data": data.toJson(),
        "PartnerData": List<dynamic>.from(partnerData.map((x) => x.toJson())),
    };
}

class Data {
    Data({
        required this.encDietId,
        required this.dietName,
        required this.email,
        required this.phone,
        required this.alternatePhone,
        required this.image,
        required this.description,
        required this.fee,
        required this.discountedFee,
        required this.bookingFee,
        required this.visitDay,
        required this.timeFrom,
        required this.timeTo,
    });

    String encDietId;
    String dietName;
    dynamic email;
    dynamic phone;
    dynamic alternatePhone;
    String image;
    dynamic description;
    dynamic fee;
    dynamic discountedFee;
    dynamic bookingFee;
    dynamic visitDay;
    dynamic timeFrom;
    dynamic timeTo;

    factory Data.fromJson(Map<String, dynamic> json) => Data(
        encDietId: json["EncDietId"],
        dietName: json["DietName"],
        email: json["Email"],
        phone: json["Phone"],
        alternatePhone: json["AlternatePhone"],
        image: json["Image"],
        description: json["Description"],
        fee: json["Fee"],
        discountedFee: json["DiscountedFee"],
        bookingFee: json["BookingFee"],
        visitDay: json["VisitDay"],
        timeFrom: json["TimeFrom"],
        timeTo: json["TimeTo"],
    );

    Map<String, dynamic> toJson() => {
        "EncDietId": encDietId,
        "DietName": dietName,
        "Email": email,
        "Phone": phone,
        "AlternatePhone": alternatePhone,
        "Image": image,
        "Description": description,
        "Fee": fee,
        "DiscountedFee": discountedFee,
        "BookingFee": bookingFee,
        "VisitDay": visitDay,
        "TimeFrom": timeFrom,
        "TimeTo": timeTo,
    };
}

class PartnerDatum {
    PartnerDatum({
        required this.partnerId,
        required this.encPartnerId,
        required this.partnerName,
        required this.partnerAddress,
        required this.fee,
        required this.discountedFee,
        required this.bookingFee,
        required this.dayList,
    });

    String partnerId;
    String encPartnerId;
    String partnerName;
    String partnerAddress;
    String fee;
    String discountedFee;
    String bookingFee;
    List<DayList> dayList;

    factory PartnerDatum.fromJson(Map<String, dynamic> json) => PartnerDatum(
        partnerId: json["PartnerId"],
        encPartnerId: json["EncPartnerId"],
        partnerName: json["PartnerName"],
        partnerAddress: json["PartnerAddress"],
        fee: json["Fee"],
        discountedFee: json["DiscountedFee"],
        bookingFee: json["BookingFee"],
        dayList: List<DayList>.from(json["DayList"].map((x) => DayList.fromJson(x))),
    );

    Map<String, dynamic> toJson() => {
        "PartnerId": partnerId,
        "EncPartnerId": encPartnerId,
        "PartnerName": partnerName,
        "PartnerAddress": partnerAddress,
        "Fee": fee,
        "DiscountedFee": discountedFee,
        "BookingFee": bookingFee,
        "DayList": List<dynamic>.from(dayList.map((x) => x.toJson())),
    };
}

class DayList {
    DayList({
        required this.dayName,
        required this.timeFrom,
        required this.timeTo,
    });

    String dayName;
    String timeFrom;
    String timeTo;

    factory DayList.fromJson(Map<String, dynamic> json) => DayList(
        dayName: json["DayName"],
        timeFrom: json["TimeFrom"],
        timeTo: json["TimeTo"],
    );

    Map<String, dynamic> toJson() => {
        "DayName": dayName,
        "TimeFrom": timeFrom,
        "TimeTo": timeTo,

    };
}

标签: jsonflutterapidart

解决方案


由于您的反序列化似乎有效,因此您可以通过以下方式访问列表中的第一个日期名称:

final firstPartnerDatum = myDietDetailsModel.partnerData[0];
final dayList = firstPartnerDatum.dayList[0];
final dayName = dayList.dayName;

推荐阅读