04 Mengenal Decode JSON
Pengenalan Decode JSON
Pada artikel sebelumnya kita sudah belajar encode JSON dan cara membuat JSON Object, maka selanjutnya kita akan mempelajari bagaimana untuk mentranslate dari JSON objek menjadi ke dalam objek struct pada Golang. Konversi dari JSON ke dalam Golang objek struct ini sering kita sebut dengan decode.
Pada Golang, untuk melakukan konversi atau dikenal decode ini kita akan menggunakan fungsi.
1json.Unmarshal(byte[],interface{})byte[]adalah data dari JSON yang akan dikonversiinterface{}adalah tempat untuk menyimpan hasil dari konversi berupa pointer struct yang kita buat pada Golang.
Cara Impelmentasi
Apakah teman-teman sudah mulai terbayang? Baiklah kita akan coba membuat suatu fungsi yang bisa melakukan konversi data dari JSON Objek ke dalam Objek struct pada Golang. Berikut teman-teman coba buat fungsi dibawah ini.
1func ConvertObjectJSON(data string) Customer {
2 var cust Customer
3 err := json.Unmarshal([]byte(data), &cust)
4 if err != nil {
5 panic(err)
6 }
7
8 return cust
9}Lihat pada fungsi diatas, akan terlihat karena data berupa tipe string maka kita perlu konversikan terlebih dahulu menjadi byte dengan menggunakan []byte(data), maka hasil dari konversi tersebut akan kita simpan di dalam struct yang sudah diinisialisikan dalam variabel cust.
Karena harus pointer yang dikirim? Unmarshal tersebut akan melakukan konversi terhadap data JSON byte tersebut dan akan dikirim value-nya ke dalam suatu variabel pointer agar tidak terdapat variabel yang nil. Maka diperlukan pointer suatu variabel akan mengalokasikan memori untuk penyimpanan yang tidak nil. Dalam penjelasan dokumentasinya pun seperti ini.
Dan cara kerja dari unmarshal tersebut seperti ini
Selanjutnya kita akan menguji fungsi diatas dengan membuat unit test seperti dibawah ini.
1func TestConvertObjectJSON(t *testing.T) {
2 type args struct {
3 data string
4 }
5 tests := []struct {
6 name string
7 args args
8 want Customer
9 }{
10 {
11 name: "success conversion object JSON",
12 args: args{
13 data: string(`{"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif"}`),
14 },
15 want: Customer{
16 FirstName: "Santekno",
17 MiddleName: "Ihsan",
18 LastName: "Arif",
19 },
20 },
21 }
22 for _, tt := range tests {
23 t.Run(tt.name, func(t *testing.T) {
24 if got := ConvertObjectJSON(tt.args.data); !reflect.DeepEqual(got, tt.want) {
25 t.Errorf("ConvertObjectJSON() = %v, want %v", got, tt.want)
26 }
27 })
28 }
29}