pemrograman

02 Encode JSON

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.

comments powered by Disqus