Pengenalan Encode JSON
Bahasa Golang sudah menyediakan fungsi untuk kebutuhan konversi data JSON yaitu kita bisa menggunakan fungsi ini
func json.Marshal(interface{})
Parameter yang dikirim ke dalam fungsi marshal tersebut berbentuk interface{} dikarenakan masukkan tipe data apapun bisa kita gunakan untuk melakukan konversi.
Cara Implementasi
Cara agar kita lebih paham terhadap encode JSON ini akan kita coba praktekkan. Anda coba buat projek baru seperti projet sebelum-sebelumnya. Misalkan kita buat folder learn-golang-json
.
Lalu inisialisasi module golang dengan perintah
go mod init github.com/santekno/learn-golang-json
Buat file main.go
untuk menyimpan kode yang akan kita buat dan isi file tersebut dengan kode dibawah ini.
func LogJSON(data interface{}) string {
bytes, err := json.Marshal(data)
if err != nil {
panic(err)
}
return string(bytes)
}
Pada fungsi diatas yang kita buat itu kita akan melakukan konversi loging ke dalam format JSON. Sehingga ketika kita mengirimkan apapun format datanya maka akan langsung dilakukan encode menjadi format JSON sesuai dengan aturan JSON.
Untuk mengujinya kita perlu membuat unit test agar kita lebih paham lagi cara kerja JSON encode tersebut dan juga kita lebih dibiasakan untuk membuat unit test disaat kita sudah melakukan coding.
package main
import (
"testing"
"github.com/go-playground/assert/v2"
)
type data struct {
FirstName string
MiddleName string
LastName string
}
func TestLogJSON(t *testing.T) {
type args struct {
data interface{}
}
tests := []struct {
name string
args args
want string
}{
{
name: "encode string",
args: args{
data: string("santekno"),
},
want: `"santekno"`,
},
{
name: "encode number",
args: args{
data: 2,
},
want: "2",
},
{
name: "encode boolean",
args: args{
data: true,
},
want: "true",
},
{
name: "encode array string",
args: args{
data: []string{"santekno", "ihsan"},
},
want: `["santekno","ihsan"]`,
},
{
name: "encode object",
args: args{
data: data{
FirstName: "Ihsan",
MiddleName: "Arif",
LastName: "Rahman",
},
},
want: `{"FirstName":"Ihsan","MiddleName":"Arif","LastName":"Rahman"}`,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, LogJSON(tt.args.data), tt.want)
})
}
}
Pada unit test diatas kita buat beberapa tipe data yang disematkan. Tipe data yang diuji diatas adalah berupa bentuk format string, number, boolean, array, dan objek. Nah semua tipe data sudah didukung oleh format JSON sehingga kita tidak perlu bingung lagi jika tipe data apa yang tidak didukung oleh JSON.