Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
14 Oct 2023 · 3 mnt baca ·Artikel 55 / 119
Go

05 Mengenal JSON Array

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Pengenalan JSON Array

Selain JSON berbentuk Objek, biasanya dalam JSOn juga kita bisa menggunakan tipe data Array. Sebenarnya array JSON itu mirip seperti yang ada pada JavaScript yang mana di dalamnya terdapat tipe data primitif atau tipe data komplek seperti array objek.

Pada Golang, JSON Array ini direpresentasikan dalam bentuk slice yang mana nanti ketika kita mengkonversikan dari JSON atau ke JSON akan dilakukan secara otomatis menggunakan package json menggunakan tipe data slice. Secara penggunaan fungsi yang dipakai sama saja seperti fungsi sebelumnya yaitu saat membuat JSON menggunakan

go
1func json.Marshal(interface{})
dan untuk konversi menjadi data pada Golang menggunakan
go
1func json.Unmarshal(byte[],interface{})

Cara Implementasi

Misalkan kita akan coba agar struct yang kita buat sebelumnya tambahkan tipe data array seperti dibawah ini.

go
1type Customer struct {
2	FirstName  string   `json:"first_name"`
3	MiddleName string   `json:"middle_name"`
4	LastName   string   `json:"last_name"`
5	Hobbies    []string `json:"hobbies"`
6}

Kita coba jalankan unit test untuk yang sebelumnya sudah dibuat yaitu pada fungsi TestGenerateObjectJSON. Maka akan terlihat FAIL unit test karena terdapat tipe data baru yang kita tambahkan.

bash
1--- FAIL: TestGenerateObjectJSON (0.00s)
2    --- FAIL: TestGenerateObjectJSON/success_generate_object_JSON (0.00s)
3        /Users/ihsanarif/Documents/ihsan/tutorial/learn-golang-json/main_test.go:96: GenerateObjectJSON() = {"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif","hobbies":null}, want {"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif"}
4FAIL
5FAIL	github.com/santekno/learn-golang-json	0.498s
6FAIL

Kita perlu mengubah unit test tersebut agar bisa mendukung data array yang terdapat pada struct Customer menjadi seperti dibawah ini.

go
 1func TestGenerateObjectJSON(t *testing.T) {
 2	type args struct {
 3		data Customer
 4	}
 5	tests := []struct {
 6		name string
 7		args args
 8		want string
 9	}{
10		{
11			name: "success generate object JSON",
12			args: args{
13				data: Customer{
14					FirstName:  "Santekno",
15					MiddleName: "Ihsan",
16					LastName:   "Arif",
17					Hobbies:    []string{"badminton", "renang", "coding"},
18				},
19			},
20			want: string(`{"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif","hobbies":["badminton","renang","coding"]}`),
21		},
22	}
23	for _, tt := range tests {
24		t.Run(tt.name, func(t *testing.T) {
25			if got := GenerateObjectJSON(tt.args.data); got != tt.want {
26				t.Errorf("GenerateObjectJSON() = %v, want %v", got, tt.want)
27			}
28		})
29	}
30}

Pada fungsi unit test TestConvertObjectJSON tidak terjadi FAIL karena untuk marshal jika tidak diset JSON tersebut tidak akan muncul menjadi key pada JSON objek. Tetapi agar seragam semua kita ubah juga unit test ini menjadi seperti dibawah ini.

go
 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","hobbies":["badminton","renang","coding"]}`),
14			},
15			want: Customer{
16				FirstName:  "Santekno",
17				MiddleName: "Ihsan",
18				LastName:   "Arif",
19				Hobbies:    []string{"badminton", "renang", "coding"},
20			},
21		},
22	}
23	for _, tt := range tests {
24		t.Run(tt.name, func(t *testing.T) {
25			if got := ConvertObjectJSON(tt.args.data); !reflect.DeepEqual(got, tt.want) {
26				t.Errorf("ConvertObjectJSON() = %v, want %v", got, tt.want)
27			}
28		})
29	}
30}

Artikel Terkait

💬 Komentar