Cara mudah convert JSON ke Dart Object @ Cong Fandi | 2022-10-23T10:00:00+07:00 | 4 minutes read | Update at 2022-10-23T10:00:00+07:00

POstingan kali ini karena ada request dari teman kita yang dari malaysia. Dia bertanya kepada saya melalui DM di facebook bagaimana cara menggunakan nested map.

Karena nested map ini ada hubngannya dengan JSON, maka sekalian saya buatkan postingan tentang cara convert JSON ke Dart Object.

Nested Map

Kita mulai dulu dari pembahasan apa itu nested map. Nested map adalah map yang berada di dalam map. Contoh nya seperti ini

    var profile = {
        "nama":"Thengoding",
        "alamat":"Surabaya",
        "situs":"https://thengoding.com",
        "hobi":[
          {
            "nama":"Blogging"
          },
          {
            "nama":"Vlogging"
          },
          {
            "nama":"Mancing"
          },
        ],
        "pekerjaan":{
          "nama": "Blogging",
          "tahun":2019,
          "penulis":"Cong Fandi"
        }
      };

Nah, kita bisa lihat bahwa ada map yang berada di dalam map. Map yang berada di dalam map disebut dengan nested map. Kita bisa mengaksesnya dengan cara seperti ini

    print(profile["pekerjaan"]["nama"]);

Kalau dengan cara diatas kalian mendapatkan error, kalian bisa menggunakan seperti ini ya

    print((profile["pekerjaan"] as Map)["nama"]);

kalian perhatikan bahwa saya menggunakan casting. Casting ini untuk mengubah tipe data dari map menjadi Map. Karena kalau tidak di casting maka akan error.

Nah, kalau kita ingin mengakses nested map yang berada di dalam list, kita bisa menggunakan cara seperti ini

    print(profile["hobi"][0]["nama"]);

sama juga dengan diatas, kalau gagal kalian bisa gunakan ini ya

     print((profile["hobi"] as List)[0]["nama"]);

pada bagian ini saya menggunakan casting List. Karena kebetulan tipe data dari hobi adalah List.

Map to Object

Kalian perhatikan cara kita memanggil data di pembahasan Nested Map diatas. Kita menggunakan cara seperti ini

    print(profile["pekerjaan"]["nama"]);

Kalau kita punya puluhan data dan puluhan nested map yang sampek bertingkat tingkat tentunya sulit ya dan berpa banyak [] yang harus kita gunakan serta sulit sekali untuk melacak kalau ada error, oleh sebab itu kita butuh convert dulu ini map kedalam bentuk class.

Langkah - Langkah

  1. Cari Nested Object Tedalama, dalam kasus kita ini adalah pekerjaan dan hobi.
  2. Buat class untuk masing - masing nested object.
  class Pekerjaan {
    String? nama;
    int? tahun;
    String? penulis;

    Pekerjaan({this.nama, this.tahun, this.penulis});

    Pekerjaan.fromJson(Map<String, dynamic> json) {
      nama = json['nama'];
      tahun = json['tahun'];
      penulis = json['penulis'];
    }

    Map<String, dynamic> toJson() {
      final Map<String, dynamic> data = new Map<String, dynamic>();
      data['nama'] = this.nama;
      data['tahun'] = this.tahun;
      data['penulis'] = this.penulis;
      return data;
    }
  }
  class Hobi {
    String? nama;

    Hobi({this.nama});

    Hobi.fromJson(Map<String, dynamic> json) {
      nama = json['nama'];
    }

    Map<String, dynamic> toJson() {
      final Map<String, dynamic> data = new Map<String, dynamic>();
      data['nama'] = this.nama;
      return data;
    }
  }

perhatikan pada kedua kelas yang sudah kita buat, disana sudah tersedia masing masing converter dari json ke object dan object ke json. Kita akan gunakan nanti. 3. Buat class utama yang akan kita convert dari json ke object.

  class Profile {
    String? nama;
    String? alamat;
    String? situs;
    List<Hobi>? hobi;
    Pekerjaan? pekerjaan;

    Profile({this.nama, this.alamat, this.situs, this.hobi, this.pekerjaan});

    Profile.fromJson(Map<String, dynamic> json) {
      nama = json['nama'];
      alamat = json['alamat'];
      situs = json['situs'];
      if (json['hobi'] != null) {
        hobi = new List<Hobi>();
        json['hobi'].forEach((v) {
          hobi.add(new Hobi.fromJson(v));
        });
      }
      pekerjaan = json['pekerjaan'] != null
          ? new Pekerjaan.fromJson(json['pekerjaan'])
          : null;
    }

    Map<String, dynamic> toJson() {
      final Map<String, dynamic> data = new Map<String, dynamic>();
      data['nama'] = this.nama;
      data['alamat'] = this.alamat;
      data['situs'] = this.situs;
      if (this.hobi != null) {
        data['hobi'] = this.hobi.map((v) => v.toJson()).toList();
      }
      if (this.pekerjaan != null) {
        data['pekerjaan'] = this.pekerjaan.toJson();
      }
      return data;
    }
  }

Disini kita sudah menggabungkan semua class yang sudah kita buat tadi. Kita bisa lihat bahwa pada class Profile kita sudah membuat object dari class Pekerjaan dan Hobi. Kita juga sudah membuat converter dari json ke object dan object ke json.

Nah, sekarang kita sudah bisa mengconvert json ke object. Kita bisa gunakan seperti ini

  Profile pf = Profile.fromJson(json.decode(profile));

Kita bisa lihat bahwa kita sudah mengconvert json ke object. Kita bisa gunakan seperti ini

  print(pf.pekerjaan.nama);

Kita bisa lihat bahwa kita sudah bisa mengakses data yang ada di dalam object.

Convert JSON menggunakan online tool

Kita bisa gunakan online tool untuk mengconvert json ke object. Kita bisa gunakan ini. Kita tinggal copy paste json yang kita punya ke dalam tool tersebut, lalu klik convert. Kita akan mendapatkan object yang sudah kita convert.

Convert JSON menggunakan library JSONtoDart (Android Studio)

Bagi kalian yang menggunakan Android Studio, kalian bisa gunakan library ini untuk mengconvert json ke object. Kita tinggal copy paste json yang kita punya ke dalam tool tersebut, lalu klik convert. Kita akan mendapatkan object yang sudah kita convert. Lebih lanjut ada di video ya guys cara menggunakan kedua tool yang kita mention ini.


Ilmu adalah dongkrak terbaik untuk merubah nasib hidup manusia. dan ilmu tidak hanya ada dibangku sekolah saja. Belajarlah selagi mampu! Penulis

© 2018 - 2022 The Ngoding

Powered by Hugo with theme Dream.

avatar

The NgodingSebuah cita-cita hanyalah mimpi jika tidak tahu cara mewujudkannya