簡體   English   中英

Flutter/Dart 解析 JSON 到 model 具有 Map 屬性

[英]Flutter/Dart Parsing JSON to model with a Map attribute

我的 API 返回給我這種 json object,其中區域鍵是動態的

{
    "workspaces": [
        {
            "id": "1154237e8b6-7270-4c99-81e9-9d752e0c295c",
            "createdAt": "2022-05-08T15:43:25.440Z",
            "updatedAt": "2022-05-08T15:43:25.440Z",
            "siteId": "42cb1511-e836-45ed-9b56-034668b8f05a",
            "orgId": "bb46311b-b76c-4f6a-9726-65ab5730b69b",
            "name": "RDC"
        }
    ],
    "zones": {
        "134528b6-7270-4c99-81e9-9d752e0c295c": [
            {
                "id": "71a11d9e-e211-472b-a16d-861737c57ecd",
                "createdAt": "2022-05-08T15:43:25.451Z",
                "updatedAt": "2022-05-08T15:43:25.451Z",
                "siteId": "421158b-e836-45ed-9b56-034668b8f05a",
                "orgId": "bb4631b-b76c-4f6a-9726-65ab5730b69b",
                "workspaceId": "13a7e8b6-7270-4c99-81e9-9d752e0c295c",
                "name": "Auditorium"
            }
        ],
        "15a745326-7270-4c99-81e9-9d752e0c295c": [
            {
                "id": "71ad31e-e211-472b-a16d-861737c57ecd",
                "createdAt": "2022-05-08T15:43:25.451Z",
                "updatedAt": "2022-05-08T15:43:25.451Z",
                "siteId": "42cb158b-e836-45ed-9b56-034668b8f05a",
                "orgId": "b11b8b-b76c-4f6a-9726-65ab5730b69b",
                "workspaceId": "1318b6-7270-4c99-81e9-9d752e0c295c",
                "name": "Auditorium"
            }
        ]
    }
}

我想要一個 model 將 json 轉換為SiteHierarchyModel我正在努力轉換這種屬性Map<String, List<ZoneModel>>

class SiteHierarchyModel {
  List<WorkspaceModel> workspaces;
  Map<String, List<ZoneModel>> zones;

  SiteHierarchyModel({
    required this.workspaces,
    required this.zones,
  });

  Map<String, dynamic> toJson() => {
        'workspaces': workspaces,
        'zones': zones,
      };

  SiteHierarchyModel.fromJson(Map<String, dynamic> json)
      : workspaces = List<WorkspaceModel>.from(json['workspaces']
            .map((workspace) => WorkspaceModel.fromJson(workspace))),
        zones = json['zones']; // THIS LINE
}

您也可以在https://app.quicktype.io/上試用。 這個網站很容易將你的 JSON 轉換成 dart model class。支持多種不同的語言

import 'dart:convert';

SiteHierarchyModel siteHierarchyModelFromJson(String str) => SiteHierarchyModel.fromJson(json.decode(str));

String siteHierarchyModelToJson(SiteHierarchyModel data) => json.encode(data.toJson());

class SiteHierarchyModel {
    SiteHierarchyModel({
        this.workspaces,
        this.zones,
    });

    List<Workspace> workspaces;
    Map<String, List<Workspace>> zones;

    factory SiteHierarchyModel.fromJson(Map<String, dynamic> json) => SiteHierarchyModel(
        workspaces: List<Workspace>.from(json["workspaces"].map((x) => Workspace.fromJson(x))),
        zones: Map.from(json["zones"]).map((k, v) => MapEntry<String, List<Workspace>>(k, List<Workspace>.from(v.map((x) => Workspace.fromJson(x))))),
    );

    Map<String, dynamic> toJson() => {
        "workspaces": List<dynamic>.from(workspaces.map((x) => x.toJson())),
        "zones": Map.from(zones).map((k, v) => MapEntry<String, dynamic>(k, List<dynamic>.from(v.map((x) => x.toJson())))),
    };
}

class Workspace {
    Workspace({
        this.id,
        this.createdAt,
        this.updatedAt,
        this.siteId,
        this.orgId,
        this.name,
        this.workspaceId,
    });

    String id;
    DateTime createdAt;
    DateTime updatedAt;
    String siteId;
    String orgId;
    String name;
    String workspaceId;

    factory Workspace.fromJson(Map<String, dynamic> json) => Workspace(
        id: json["id"],
        createdAt: DateTime.parse(json["createdAt"]),
        updatedAt: DateTime.parse(json["updatedAt"]),
        siteId: json["siteId"],
        orgId: json["orgId"],
        name: json["name"],
        workspaceId: json["workspaceId"] == null ? null : json["workspaceId"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "createdAt": createdAt.toIso8601String(),
        "updatedAt": updatedAt.toIso8601String(),
        "siteId": siteId,
        "orgId": orgId,
        "name": name,
        "workspaceId": workspaceId == null ? null : workspaceId,
    };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM