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
func json.Marshal(interface{})
dan untuk konversi menjadi data pada Golang menggunakan
func json.Unmarshal(byte[],interface{})
Cara Implementasi
Misalkan kita akan coba agar struct yang kita buat sebelumnya tambahkan tipe data array seperti dibawah ini.
type Customer struct {
FirstName string `json:"first_name"`
MiddleName string `json:"middle_name"`
LastName string `json:"last_name"`
Hobbies []string `json:"hobbies"`
}
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.
--- FAIL: TestGenerateObjectJSON (0.00s)
--- FAIL: TestGenerateObjectJSON/success_generate_object_JSON (0.00s)
/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"}
FAIL
FAIL github.com/santekno/learn-golang-json 0.498s
FAIL
Kita perlu mengubah unit test tersebut agar bisa mendukung data array yang terdapat pada struct Customer
menjadi seperti dibawah ini.
func TestGenerateObjectJSON(t *testing.T) {
type args struct {
data Customer
}
tests := []struct {
name string
args args
want string
}{
{
name: "success generate object JSON",
args: args{
data: Customer{
FirstName: "Santekno",
MiddleName: "Ihsan",
LastName: "Arif",
Hobbies: []string{"badminton", "renang", "coding"},
},
},
want: string(`{"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif","hobbies":["badminton","renang","coding"]}`),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := GenerateObjectJSON(tt.args.data); got != tt.want {
t.Errorf("GenerateObjectJSON() = %v, want %v", got, tt.want)
}
})
}
}
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.
func TestConvertObjectJSON(t *testing.T) {
type args struct {
data string
}
tests := []struct {
name string
args args
want Customer
}{
{
name: "success conversion object JSON",
args: args{
data: string(`{"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif","hobbies":["badminton","renang","coding"]}`),
},
want: Customer{
FirstName: "Santekno",
MiddleName: "Ihsan",
LastName: "Arif",
Hobbies: []string{"badminton", "renang", "coding"},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := ConvertObjectJSON(tt.args.data); !reflect.DeepEqual(got, tt.want) {
t.Errorf("ConvertObjectJSON() = %v, want %v", got, tt.want)
}
})
}
}
04 Mengenal Decode JSON
Golang JSON 06 Mengenal JSON Tags
Artikel Terhangat
56 Apa Itu Subscription di GraphQL?
08 Aug 2025
78. Men-deploy gRPC Service di Docker
08 Aug 2025
77. gRPC di Kubernetes dengan LoadBalancer
08 Aug 2025
54 Menambahkan Rate Limiting dan Throttling
08 Aug 2025
76. Menyambungkan gRPC Service dengan Kafka
08 Aug 2025

56 Apa Itu Subscription di GraphQL?

78. Men-deploy gRPC Service di Docker

77. gRPC di Kubernetes dengan LoadBalancer

54 Menambahkan Rate Limiting dan Throttling
