简体   繁体   中英

Parse JSON array in side JSON array with List<Class> Flutter

I have JSON like this

{
"status": "true",
"data": [
    {
        "idpekerjaan": "1",
        "namapekerjaan": "Apel Pagi / Sore",
        "subpekerjaan": [
            {
                "idsubpekerjaan": "2",
                "namasubpekerjaan": "Apel Pagi/Sore",
                "standarwaktu": "15"
            },
            {
                "idsubpekerjaan": "3",
                "namasubpekerjaan": "Apel Pagi/Sore",
                "standarwaktu": "20"
            }  
        ]
    },
    {
        "idpekerjaan": "2",
        "namapekerjaan": "Upacara",
        "subpekerjaan": [
            {
                "idsubpekerjaan": "10",
                "namasubpekerjaan": "Upacara",
                "standarwaktu": "60"
            },
            {
                "idsubpekerjaan": "11",
                "namasubpekerjaan": "Upacara",
                "standarwaktu": "90"
            }
        ]
    },
}

Saya mempunyai fungsi-fungsi:

 class Localization {
  final List <DataPekerjaan> pekerjaan;
  final List <SubPekerjaan> subpekerjaan;

  Localization({this.pekerjaan, this.subpekerjaan});

  factory Localization.fromJson(Map<String, dynamic> json) {
    return Localization(
      subpekerjaan: parseStates(json),
      pekerjaan: parseProvinces(json),

    );
  }


  static List<SubPekerjaan> parseStates(statesJson) {

    List<DataPekerjaan> cari = parseProvinces(statesJson);
    var slist = ???????????????????? as List;
    List<SubPekerjaan> statesList =
       slist.map((data) => SubPekerjaan.fromJson(data)).toList();
    return statesList;
  }

  static List<DataPekerjaan> parseProvinces(provincesJson) {
    var plist = provincesJson['data'] as List;
    List<DataPekerjaan> provincesList =
        plist.map((data) => DataPekerjaan.fromJson(data)).toList();
    return provincesList;
  }

}

class SubPekerjaan {
  final String idSubPekerjaan;
  final String namaSubPekerjaan;
  final String standarWaktu;

  SubPekerjaan({this.idSubPekerjaan, this.namaSubPekerjaan, this.standarWaktu});

  factory SubPekerjaan.fromJson(Map<String, dynamic> parsedJson){
    return SubPekerjaan(idSubPekerjaan: parsedJson['idsubpekerjaan'], namaSubPekerjaan: parsedJson['namasubpekerjaan'], standarWaktu: parsedJson['standarwaktu']);
  }

}

class DataPekerjaan {
  final String idPekerjaan;
  final String namaPekerjaan;
  final List<String> subPekerjaan;

  DataPekerjaan({this.idPekerjaan, this.namaPekerjaan, this.subPekerjaan});

  factory DataPekerjaan.fromJson(Map<String, dynamic> parsedJson) {
    return DataPekerjaan(idPekerjaan: parsedJson['idpekerjaan'], namaPekerjaan: parsedJson['namapekerjaan'],  subPekerjaan: parsedJson["subpekerjaan"]);
  }

}

I want to retrieve the contents of an array of data and then I create a List and then I also want to take the contents of an array of subpekerjaan so that it becomes a separate data. How can I insert each of those arrays into a function that I already have, especially in the ListparseStates (statesJson). What should I fill in the question mark? Then is it true how I declare the data type List subPekerjaan on the DataPekerjaan class?

First your json is invalid (VAlidate at https://jsonlint.com/ ) it should be

{
"status": "true",
"data": [
    {
        "idpekerjaan": "1",
        "namapekerjaan": "Apel Pagi / Sore",
        "subpekerjaan": [
            {
                "idsubpekerjaan": "2",
                "namasubpekerjaan": "Apel Pagi/Sore",
                "standarwaktu": "15"
            },
            {
                "idsubpekerjaan": "3",
                "namasubpekerjaan": "Apel Pagi/Sore",
                "standarwaktu": "20"
            }  
        ]
    },
    {
        "idpekerjaan": "2",
        "namapekerjaan": "Upacara",
        "subpekerjaan": [
            {
                "idsubpekerjaan": "10",
                "namasubpekerjaan": "Upacara",
                "standarwaktu": "60"
            },
            {
                "idsubpekerjaan": "11",
                "namasubpekerjaan": "Upacara",
                "standarwaktu": "90"
            }
        ]
    }
    ]
}

Now try with class

// To parse this JSON data, do
//
//     final myModel = myModelFromJson(jsonString);

import 'dart:convert';

MyModel myModelFromJson(String str) => MyModel.fromJson(json.decode(str));

String myModelToJson(MyModel data) => json.encode(data.toJson());

class MyModel {
    String status;
    List<Datum> data;

    MyModel({
        this.status,
        this.data,
    });

    factory MyModel.fromJson(Map<String, dynamic> json) => MyModel(
        status: json["status"],
        data: List<Datum>.from(json["data"].map((x) => Datum.fromJson(x))),
    );

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

class Datum {
    String idpekerjaan;
    String namapekerjaan;
    List<Subpekerjaan> subpekerjaan;

    Datum({
        this.idpekerjaan,
        this.namapekerjaan,
        this.subpekerjaan,
    });

    factory Datum.fromJson(Map<String, dynamic> json) => Datum(
        idpekerjaan: json["idpekerjaan"],
        namapekerjaan: json["namapekerjaan"],
        subpekerjaan: List<Subpekerjaan>.from(json["subpekerjaan"].map((x) => Subpekerjaan.fromJson(x))),
    );

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

class Subpekerjaan {
    String idsubpekerjaan;
    String namasubpekerjaan;
    String standarwaktu;

    Subpekerjaan({
        this.idsubpekerjaan,
        this.namasubpekerjaan,
        this.standarwaktu,
    });

    factory Subpekerjaan.fromJson(Map<String, dynamic> json) => Subpekerjaan(
        idsubpekerjaan: json["idsubpekerjaan"],
        namasubpekerjaan: json["namasubpekerjaan"],
        standarwaktu: json["standarwaktu"],
    );

    Map<String, dynamic> toJson() => {
        "idsubpekerjaan": idsubpekerjaan,
        "namasubpekerjaan": namasubpekerjaan,
        "standarwaktu": standarwaktu,
    };
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM