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

02 Encode JSON

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Pengenalan Encode JSON

Bahasa Golang sudah menyediakan fungsi untuk kebutuhan konversi data JSON yaitu kita bisa menggunakan fungsi ini

go
1func 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

bash
1go 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.

go
1func LogJSON(data interface{}) string {
2	bytes, err := json.Marshal(data)
3	if err != nil {
4		panic(err)
5	}
6
7	return string(bytes)
8}

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.

go
 1package main
 2
 3import (
 4	"testing"
 5
 6	"github.com/go-playground/assert/v2"
 7)
 8
 9type data struct {
10	FirstName  string
11	MiddleName string
12	LastName   string
13}
14
15func TestLogJSON(t *testing.T) {
16	type args struct {
17		data interface{}
18	}
19	tests := []struct {
20		name string
21		args args
22		want string
23	}{
24		{
25			name: "encode string",
26			args: args{
27				data: string("santekno"),
28			},
29			want: `"santekno"`,
30		},
31		{
32			name: "encode number",
33			args: args{
34				data: 2,
35			},
36			want: "2",
37		},
38		{
39			name: "encode boolean",
40			args: args{
41				data: true,
42			},
43			want: "true",
44		},
45		{
46			name: "encode array string",
47			args: args{
48				data: []string{"santekno", "ihsan"},
49			},
50			want: `["santekno","ihsan"]`,
51		},
52		{
53			name: "encode object",
54			args: args{
55				data: data{
56					FirstName:  "Ihsan",
57					MiddleName: "Arif",
58					LastName:   "Rahman",
59				},
60			},
61			want: `{"FirstName":"Ihsan","MiddleName":"Arif","LastName":"Rahman"}`,
62		},
63	}
64	for _, tt := range tests {
65		t.Run(tt.name, func(t *testing.T) {
66			assert.Equal(t, LogJSON(tt.args.data), tt.want)
67		})
68	}
69}

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.

Artikel Terkait

💬 Komentar