Json di VB.Net Windows Form App



Json di vb.net windows form app


Json di VB.Net Windows Form App - Yosh selamat siang menjelang sore sobs-sobs sekalian, semoga kalian masih diberikan kesehatan sehingga bisa menikmati senja sambil sruput kopi. hehehe

Oke pada kesempatan kali ini gua akan bahas tentang pengelolaan JSON di Vb.Net, oke langsung saja daripada kebanyakan basa-basinya nanti keburu ngantuk kita ke topik pembahasan.



Pertama-tama kita akan setup project kita, disini gua menggunakan Microsoft Visual Studio 2022 Comunity Edition. jika sobs-sobs belum ada silahkan download terlebih dahulu.

1.    Set Up Project

Langkah kedua kita mensetup project kita. untuk lebih jelasnya sobs-sobs bisa lihat gambar dibawah ini beserta penjelasannya.
  • pilih create a new project.

  • Pilih bahasa pemrograman Visual Basic, target platform All platforms, dan jenis aplikasi Desktop, dan terkahir pilih Windows Forms App. jika sudah langsung Next.


  • Namai project sobs-sobs sekalian.

  • Pilih versi net framework.

  • Tampilan awal setelah kita selesai setup project.


2.    Install Library

Jika sesi setup project kita sudah selesai, kita perlu menginstall library untuk melakukan pengelolaan terhadap JSON, cara install pun cukup mudah sobs-sobs sekalian.

  • pilih menu project, kemudian arahkan ke Manage NuGet Packages

  • Ketikan dikolom pencarian Newtonsoft.Json dan kemudian klik dan pilih install.

  • pilih Apply, dan tunggu sampai instalasi selesai

Oke sesi install library sudah selesai, next kita ke pokok inti pembahasan

3.    Serialization Object (Array, List, Dictonary) Ke Json

Oke kali ini kita akan coba serialize tipe data Collection / Object ke json, artinya kita ubah tipe data yang ada vb.net terkhusus collection ke json hasil serialize ini akan berupa string dengan format Json.

disini kita tambahkan satu buah button ke dalam form kita. klik kanan lalu pilih properties kemudian kita ubah tulisannya, jika sudah silahkan klik dua kali button tersebut yang artinya kita akan menjalankan kode kita jika button tersebut akan diklik. untuk lebih jelasnya silahkan lihat kilas dibawah ini sobs-sobs



3.1     Array ke Json

untuk mengubah array ke json pertama kita perlu mengimport library Newtonsoft.Json, dan kemudian kita gunakan JsonConvert.SerializeObject(dataArray), untuk contoh kodenya bisa lihat dibawah sobs:

Imports Newtonsoft.Json

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Array ke json
        Dim dataArray As String() = {"satu", "dua", "tiga"}
        Dim hasilArrayConvertKeJson = JsonConvert.SerializeObject(dataArray)
        MsgBox(hasilArrayConvertKeJson)
        MsgBox(TypeName(hasilArrayConvertKeJson))

    End Sub
End Class

diatas merupakan contoh dimana kita mendefinisikan sebuah array bertipe data string didalam variabel dataArray kemudian kita ubah ke json dengan menggunakan JsonConvert.SerializeObject hasil serialize ini kita tampung kedalam variabel hasilArrayConvertKeJson. variabel hasilArrayConvertKeJson ini akan bertipe data string dengan format json. untuk memastikannya kita cek hasil convertnya dan tipe datanya dengan menggunakan msgbox. setelah itu mari kita jalankan seperti dibawah ini.



3.2    List ke Json

Sebenarnya sama seperti array kita masih juga masih menggunakan JsonConvert.SerializeObject, untuk contoh kode seperti dibawah ini ya sobs.

Imports Newtonsoft.Json

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'List ke json
        Dim dataList As New List(Of String)({"Gajah", "Kodok", "Bebek"})
        Dim hasilListConvertKeJson = JsonConvert.SerializeObject(dataList)
        MsgBox(hasilListConvertKeJson)
        MsgBox(TypeName(hasilListConvertKeJson))

    End Sub
End Class


sobs-sobs bisa jalankan.

3.3    Dictonary ke Json

Sekarang bagaimana kalo dictonary ? Sama seperti array dan list kita gunakan kembali JsonConvert.SerializeObject, silahkan perhatikan kode dibawah ini ya sobs.

Imports Newtonsoft.Json

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Dictonary ke json
        Dim dataDictonary As New Dictionary(Of String, String) From {{"nama", "sruputkode"}, {"alamat", "dunia maya"}}
        Dim hasilDictonaryConvertKeJson = JsonConvert.SerializeObject(dataDictonary)
        MsgBox(hasilDictonaryConvertKeJson)
        MsgBox(TypeName(hasilDictonaryConvertKeJson))

    End Sub
End Class


Silahkan sobs-sobs jalankan.


oke next ke proses kebalikannya yaitu 

4.    Deserialization Json ke Object (Array, List, Dictonary)

Proses ini adalah mengubah bentuk json ke dalam tipe data yang didukung oleh vb.net. silahkan sobs-sobs tambahkan button kembali ke dalam form. button ini kita gunakan untuk proses Deserialization. klik dua kali pada tombol Deserialization sehingga kita masuk ke event klik.



Jika sudah maka kita akan mencoba simulasi simple fetch json dengan methode GET menggunakan web client vb.net.



4.1    Json Object ke Dictonary

adapun url kita untuk melakukan test adalah https://dummyjson.com/test dan response json yang akan didapatkan akan seperti dibawah ini sobs : 


{
  "status": "ok",
  "method": "GET"
}
Oke berikut ini kode untuk melakukan pengetesannya : 

Imports Newtonsoft.Json
Imports System.Net

Public Class Form1

    'btn Serialization
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Dictonary ke json
        Dim dataDictonary As New Dictionary(Of String, String) From {{"nama", "sruputkode"}, {"alamat", "dunia maya"}}
        Dim hasilDictonaryConvertKeJson = JsonConvert.SerializeObject(dataDictonary)
        MsgBox(hasilDictonaryConvertKeJson)
        MsgBox(TypeName(hasilDictonaryConvertKeJson))

    End Sub


    ' btn Deserialization
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'json object ke Dictonary
        Dim url As String = "https://dummyjson.com/test"

        Dim client As New WebClient

        Dim hasilDonwloadString = client.DownloadString(url)
        Dim jsonDictonary As New Dictionary(Of String, String)
        jsonDictonary = JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(hasilDonwloadString)

        MsgBox(TypeName(jsonDictonary))
        MsgBox(jsonDictonary("status"))

    End Sub
End Class


Perhatikan bagian btn Deserialization ya sobs-sobs. sedikit penjelasan karena kita ingin melakukan request untuk medapatkan json resource oleh karena itu kita wajib mengimport terlebih dahulu http web client dengan cara Imports System.net seperti diatas sobs. 

selajutnya kita inisialisasi terlebih dahulu urlnya, kemudian kita insialisasi http web clientnya dengan nama variabel client, berikutnya kita buat sebuah variabel untuk menampung hasil download client dengan nama hasilDownloadString dan kita lakukan request dengan cara client.DownloadString(url) proses ini sama saja kita melakukan request untuk  mendownload json resourcenya sobs.
next step kita buat sebuah variabel dictonary untuk menampung hasil Deserialization dengan nama jsonDictonary yang perlu diperhatikan adalah tipe untuk key dan valuenya, karena json resource yang ingin kita dapatkan untuk key dan valuenya string semua maka kita deklrasikan dictonary key dan valuenya bertipe string.
next step adalah proses Deserialization yaitu menggunakan 
JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(hasilDonwloadString)

msgbox pertama untuk mengecek tipe data hasil Deserialization apakah benar bertipe data dictonary,
msgbox kedua untuk mengecek apakah kita bisa mengambil value dictonarynya.

Sekarang kita coba jalankan yaaa.


Oke sekarang kita ke topik lainnya.

4.2    Json Array ke Vb.net List

Setelah kita selesai dengan mengubah json tipe objek ke dictonary, selanjutnya kita akan coba hal lainnya, yaitu mengubah json array ke dalam bentuk list vb. oke untuk contoh result jsonnya akan seperti dibawah ini dari sumber https://jsonplaceholder.typicode.com/users

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
  {
    "id": 2,
    "name": "Ervin Howell",
    "username": "Antonette",
    "email": "Shanna@melissa.tv",
    "address": {
      "street": "Victor Plains",
      "suite": "Suite 879",
      "city": "Wisokyburgh",
      "zipcode": "90566-7771",
      "geo": {
        "lat": "-43.9509",
        "lng": "-34.4618"
      }
    },
    "phone": "010-692-6593 x09125",
    "website": "anastasia.net",
    "company": {
      "name": "Deckow-Crist",
      "catchPhrase": "Proactive didactic contingency",
      "bs": "synergize scalable supply-chains"
    }
  },
  {
    "id": 3,
    "name": "Clementine Bauch",
    "username": "Samantha",
    "email": "Nathan@yesenia.net",
    "address": {
      "street": "Douglas Extension",
      "suite": "Suite 847",
      "city": "McKenziehaven",
      "zipcode": "59590-4157",
      "geo": {
        "lat": "-68.6102",
        "lng": "-47.0653"
      }
    },
    "phone": "1-463-123-4447",
    "website": "ramiro.info",
    "company": {
      "name": "Romaguera-Jacobson",
      "catchPhrase": "Face to face bifurcated interface",
      "bs": "e-enable strategic applications"
    }
  },
  {
    "id": 4,
    "name": "Patricia Lebsack",
    "username": "Karianne",
    "email": "Julianne.OConner@kory.org",
    "address": {
      "street": "Hoeger Mall",
      "suite": "Apt. 692",
      "city": "South Elvis",
      "zipcode": "53919-4257",
      "geo": {
        "lat": "29.4572",
        "lng": "-164.2990"
      }
    },
    "phone": "493-170-9623 x156",
    "website": "kale.biz",
    "company": {
      "name": "Robel-Corkery",
      "catchPhrase": "Multi-tiered zero tolerance productivity",
      "bs": "transition cutting-edge web services"
    }
  },
  {
    "id": 5,
    "name": "Chelsey Dietrich",
    "username": "Kamren",
    "email": "Lucio_Hettinger@annie.ca",
    "address": {
      "street": "Skiles Walks",
      "suite": "Suite 351",
      "city": "Roscoeview",
      "zipcode": "33263",
      "geo": {
        "lat": "-31.8129",
        "lng": "62.5342"
      }
    },
    "phone": "(254)954-1289",
    "website": "demarco.info",
    "company": {
      "name": "Keebler LLC",
      "catchPhrase": "User-centric fault-tolerant solution",
      "bs": "revolutionize end-to-end systems"
    }
  },
  {
    "id": 6,
    "name": "Mrs. Dennis Schulist",
    "username": "Leopoldo_Corkery",
    "email": "Karley_Dach@jasper.info",
    "address": {
      "street": "Norberto Crossing",
      "suite": "Apt. 950",
      "city": "South Christy",
      "zipcode": "23505-1337",
      "geo": {
        "lat": "-71.4197",
        "lng": "71.7478"
      }
    },
    "phone": "1-477-935-8478 x6430",
    "website": "ola.org",
    "company": {
      "name": "Considine-Lockman",
      "catchPhrase": "Synchronised bottom-line interface",
      "bs": "e-enable innovative applications"
    }
  },
  {
    "id": 7,
    "name": "Kurtis Weissnat",
    "username": "Elwyn.Skiles",
    "email": "Telly.Hoeger@billy.biz",
    "address": {
      "street": "Rex Trail",
      "suite": "Suite 280",
      "city": "Howemouth",
      "zipcode": "58804-1099",
      "geo": {
        "lat": "24.8918",
        "lng": "21.8984"
      }
    },
    "phone": "210.067.6132",
    "website": "elvis.io",
    "company": {
      "name": "Johns Group",
      "catchPhrase": "Configurable multimedia task-force",
      "bs": "generate enterprise e-tailers"
    }
  },
  {
    "id": 8,
    "name": "Nicholas Runolfsdottir V",
    "username": "Maxime_Nienow",
    "email": "Sherwood@rosamond.me",
    "address": {
      "street": "Ellsworth Summit",
      "suite": "Suite 729",
      "city": "Aliyaview",
      "zipcode": "45169",
      "geo": {
        "lat": "-14.3990",
        "lng": "-120.7677"
      }
    },
    "phone": "586.493.6943 x140",
    "website": "jacynthe.com",
    "company": {
      "name": "Abernathy Group",
      "catchPhrase": "Implemented secondary concept",
      "bs": "e-enable extensible e-tailers"
    }
  },
  {
    "id": 9,
    "name": "Glenna Reichert",
    "username": "Delphine",
    "email": "Chaim_McDermott@dana.io",
    "address": {
      "street": "Dayna Park",
      "suite": "Suite 449",
      "city": "Bartholomebury",
      "zipcode": "76495-3109",
      "geo": {
        "lat": "24.6463",
        "lng": "-168.8889"
      }
    },
    "phone": "(775)976-6794 x41206",
    "website": "conrad.com",
    "company": {
      "name": "Yost and Sons",
      "catchPhrase": "Switchable contextually-based project",
      "bs": "aggregate real-time technologies"
    }
  },
  {
    "id": 10,
    "name": "Clementina DuBuque",
    "username": "Moriah.Stanton",
    "email": "Rey.Padberg@karina.biz",
    "address": {
      "street": "Kattie Turnpike",
      "suite": "Suite 198",
      "city": "Lebsackbury",
      "zipcode": "31428-2261",
      "geo": {
        "lat": "-38.2386",
        "lng": "57.2232"
      }
    },
    "phone": "024-648-3804",
    "website": "ambrose.net",
    "company": {
      "name": "Hoeger LLC",
      "catchPhrase": "Centralized empowering task-force",
      "bs": "target end-to-end models"
    }
  }
]
dimana json result tersebut dapat dilihat bahawa element list berupa dictonary dan didalam dictonary tersebut untuk valuenya ada tipe yang berbeda terutama dibagian id oleh karena itu kita definisikan valuenya sebagai Object ya sobs - sobs. untuk kodenya akan seperti dibawah ini :

Imports Newtonsoft.Json
Imports System.Net

Public Class Form1

    'btn Serialization
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Dictonary ke json
        Dim dataDictonary As New Dictionary(Of String, String) From {{"nama", "sruputkode"}, {"alamat", "dunia maya"}}
        Dim hasilDictonaryConvertKeJson = JsonConvert.SerializeObject(dataDictonary)
        MsgBox(hasilDictonaryConvertKeJson)
        MsgBox(TypeName(hasilDictonaryConvertKeJson))

    End Sub


    ' btn Deserialization
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'json Array ke List
        Dim url As String = "https://jsonplaceholder.typicode.com/users"

        Dim client As New WebClient

        Dim hasilDonwloadString = client.DownloadString(url)
        Dim jsonList As New List(Of Dictionary(Of String, Object))
        jsonList = JsonConvert.DeserializeObject(Of List(Of Dictionary(Of String, Object)))(hasilDonwloadString)

        MsgBox(TypeName(jsonList))
        MsgBox(jsonList(0)("id").ToString & " : " & jsonList(0)("name"))

    End Sub
End Class


Dan jika sobs-sobs jalankan maka akan seperti dibawah ini :


Yang perlu diperhatikan sobs-sobs saat kita bekerja untuk mengkonversi data json adalah memastikan tipe data apa yang cocok sesuai dengan result jsonnya.

Oke mungkin sekian dahulu pembahasannya sobs-sobs, jika ada yang kurang jelas silahkan bertanya dikolom komentar atau sobs-sobs dapat mencari refrensi di sumber lainnya.

Sekian dan terimakasih sobs-sobs.

See you next time.


Posting Komentar untuk "Json di VB.Net Windows Form App"

www.domainesia.com
Web Hosting
www.domainesia.com