Pengenalan JSON Object
Pada artikel sebelumnya kita sudah mempelajari encode data seperti string
, number
, boolean
dan tipe primitif lainnya. Tetapi ada satu case pada unit test yang dibuat berupa struct objek. Nah pada kali ini kita akan lebih dalam lagi mempelajari objek dari JSOn tersebut. Data JSON bentuknya objek dan Array sedangkan valuenya bisa berupa objek lagi atau langsung data dengan tipe primitif lainnya.
Contoh JSON Objek seperti dibawah ini.
{
"first_name":"Santekno",
"middle_name": "Ihsan",
"last_name":"Arif"
}
JSON Objek pada Golang itu bisa direpresentasikan dalam bentuk tipe data Struct yang mana nantinya tiap atribut pada JSON Objek itu merupakan atribut dari struct itu sendiri.
Kita coba representasikan JSON Objek diatas menjadi struktur struct seperti ini
type Customer struct {
FirstName string `json:"first_name"`
MiddleName string `json:"middle_name"`
LastName string `json:"last_name"`
}
Pada struct diatas kita lihat ada penambahan json:"first_name"
dan yang lain juga ini dibutuhkan untuk mengganti nama key
dari objek JSON tersebut. Misalkan pada JSON Objek kita buat key first_name
tetapi ingin kita representasikan di struct Customer
dengan field FirstName
. Maka ini seperti mapping key
JSON objek terhadap field yang ada pada struct FirstName
.
Cara Implementasi JSON objek
Contohnya kita akan coba membuat JSON objek yang kita ambil dari suatu struct yang kita buat. Kita coba buat suatu.
type Customer struct {
FirstName string `json:"first_name"`
MiddleName string `json:"middle_name"`
LastName string `json:"last_name"`
}
func GenerateobjekJSON(data Customer) string {
bytes, err := json.Marshal(data)
if err != nil {
panic(err)
}
return string(bytes)
}
Maka bisa kita lihat untuk membuat objek JSON sama halnya seperti fungsi yang pernah kita buat sebelumnya tetapi kita buat suatu parameter dengan tipe data struct Customer
.
Kita akan coba melakukan uji fungsi yang telah kita buat dengan menggunakan unit test.
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",
},
},
want: string(`{"first_name":"Santekno","middle_name":"Ihsan","last_name":"Arif"}`),
},
}
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)
}
})
}
}
Bisa kita lihat hasil dari json.Marshal
tersebut akan membuat JSON Objek memiliki key
yang sudah dibuat pada tags json
yang ada pada struct tersebut.