0
votes

Comment lire un fichier JSON imbriqué complexe à l'aide de DART

de mon API: https://apl.data.gov.sg/v1/transport/carpark- Disponibilité

Je veux lire en utilisant Dart. J'ai appris à lire des fichiers JSON imbriqués avec une liste en ligne, mais je n'ai absolument aucune idée de la lecture d'un tel complexe.


1 commentaires

Vous pouvez jeter un coup d'œil sur ce package DART ici ici PUB.DEV/PACACKAGES/JSON_SERIALISABLE


4 Réponses :


1
votes

Votre classe d'intervention JSON devrait être comme pour sérialiser et désérialiser

class ResponseData {
  List<Item> items;

  ResponseData({
    this.items,
  });

  factory ResponseData.fromJson(Map<String, dynamic> json) =>
      ResponseData(
        items: List<Item>.from(json["items"].map((x) => Item.fromJson(x))),
      );

  Map<String, dynamic> toJson() =>
      {
        "items": List<dynamic>.from(items.map((x) => x.toJson())),
      };
}

class Item {
  DateTime timestamp;
  List<CarparkDatum> carparkData;

  Item({
    this.timestamp,
    this.carparkData,
  });

  factory Item.fromJson(Map<String, dynamic> json) =>
      Item(
        timestamp: DateTime.parse(json["timestamp"]),
        carparkData: List<CarparkDatum>.from(
            json["carpark_data"].map((x) => CarparkDatum.fromJson(x))),
      );

  Map<String, dynamic> toJson() =>
      {
        "timestamp": timestamp.toIso8601String(),
        "carpark_data": List<dynamic>.from(carparkData.map((x) => x.toJson())),
      };
}

class CarparkDatum {
  List<CarparkInfo> carparkInfo;
  String carparkNumber;
  DateTime updateDatetime;

  CarparkDatum({
    this.carparkInfo,
    this.carparkNumber,
    this.updateDatetime,
  });

  factory CarparkDatum.fromJson(Map<String, dynamic> json) =>
      CarparkDatum(
        carparkInfo: List<CarparkInfo>.from(
            json["carpark_info"].map((x) => CarparkInfo.fromJson(x))),
        carparkNumber: json["carpark_number"],
        updateDatetime: DateTime.parse(json["update_datetime"]),
      );

  Map<String, dynamic> toJson() =>
      {
        "carpark_info": List<dynamic>.from(carparkInfo.map((x) => x.toJson())),
        "carpark_number": carparkNumber,
        "update_datetime": updateDatetime.toIso8601String(),
      };
}

class CarparkInfo {
  String totalLots;
  LotType lotType;
  String lotsAvailable;

  CarparkInfo({
    this.totalLots,
    this.lotType,
    this.lotsAvailable,
  });

  factory CarparkInfo.fromJson(Map<String, dynamic> json) =>
      CarparkInfo(
        totalLots: json["total_lots"],
        lotType: lotTypeValues.map[json["lot_type"]],
        lotsAvailable: json["lots_available"],
      );

  Map<String, dynamic> toJson() =>
      {
        "total_lots": totalLots,
        "lot_type": lotTypeValues.reverse[lotType],
        "lots_available": lotsAvailable,
      };
}

enum LotType { C, H, Y, L }

final lotTypeValues = EnumValues({
  "C": LotType.C,
  "H": LotType.H,
  "L": LotType.L,
  "Y": LotType.Y
});

class EnumValues<T> {
  Map<String, T> map;
  Map<T, String> reverseMap;

  EnumValues(this.map);

  Map<T, String> get reverse {
    if (reverseMap == null) {
      reverseMap = map.map((k, v) => new MapEntry(v, k));
    }
    return reverseMap;
  }
}


0 commentaires

0
votes

Vous pouvez toujours importer la dart: convertir le package et utiliser la fonction JSON.Decode.


0 commentaires

0
votes

Utilisez simplement ce site pour convertir votre réponse JSON à la classe DART

JSON à DART

Je recommande vivement d'utiliser JSON Serializable pour de telles choses.

Voici un bon tutoriel pour appeler le réseau

Fetch Data du flutter Internet

réseau de traitement comme un pro


0 commentaires

0
votes

Si vous avez essayé de sérialiser ou de désérialiser la charge utile JSON, cela devrait être un bon départ. Cependant, si vous rencontrez des difficultés, ce que vos modèles ressembleraient à un complexe, vous essayez de coller la charge utile JSON ici .

modèles.dart xxx

Bien que ces modèles soient déjà générés pour vous, il est préférable que vous puissiez Vérifiez si chaque champ correspond à leur type de données approprié et nom de champ .

Il y a des stratégies différentes en sérialisant et désérialisant JSON BAYLOAD. C'est le plus basique, mais devrait être une bonne pour des projets plus petits avec de petites équipes. L'équipe de flutter a créé un Document pour vous aider à identifier les suites Votre besoin.

En outre, ces ressources devraient vous aider à sortir:


2 commentaires

Merci !!, ces ressources sont très utiles


De rien!