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

Golang JSON 09 Penggunaan Streaming Encoder

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Pengenalan Stream Encoder

Selain JSON Decoder, pada package JSON ini juga bisa mendukung Encoder yang digunakan langsung JSON ke dalam io.Writer. Maka dengan begitu kita tidak perlu menyimpan JSON datanya terlebih dahulu ke dalam suatu variabel string atau []byte, jadi kita bisa langsung saja menulis ke dalam io.Writer.

Jika kita ingin membuat Encoder maka kita bisa menggunakan fungsi

go
1json.NewEncoder(writer)
Dan untuk menulis data sebagai JSON langsung sebagai writer kita perlu menggunakan fungsi
go
1Encode(interface{})

Penggunaan Stream Encoder

Nah kita coba langsung bagaimana membuat suatu stream Encoder JSON untuk pertama kita perlu membuat fungsi seperti dibawah ini.

go
1func EncoderStreaWriterJSON(cust Customer) {
2	writer, _ := os.Create("sample_output.json")
3	encoder := json.NewEncoder(writer)
4
5	err := encoder.Encode(cust)
6	if err != nil {
7		panic(err)
8	}
9}

Fungsi diatas ini kita akan menerima dari parameter data Customer struct lalu kita akan menyimpan data tersebut dalam file sample_output.json dan sekaligus isi data didalamnya dalam bentuk json file juga.

Memastikan fungsi tersebut berjalan dengan baik, maka kita perlu membuat unit test pada fungsi tersebut. Berikut dibawah ini pengujian (unit test) yang harus kita buat.

go
 1func TestEncoderStreamWriterJSON(t *testing.T) {
 2	type args struct {
 3		cust Customer
 4	}
 5	tests := []struct {
 6		name string
 7		args args
 8		want Customer
 9	}{
10		{
11			name: "success encode strem reader",
12			args: args{
13				cust: Customer{
14					FirstName:  "Santekno",
15					MiddleName: "Ihsan",
16					LastName:   "Arif",
17					Hobbies:    []string{"badminton", "renang", "coding"},
18				},
19			},
20			want: Customer{
21				FirstName:  "Santekno",
22				MiddleName: "Ihsan",
23				LastName:   "Arif",
24				Hobbies:    []string{"badminton", "renang", "coding"},
25			},
26		},
27	}
28	for _, tt := range tests {
29		t.Run(tt.name, func(t *testing.T) {
30			EncoderStreaWriterJSON(tt.args.cust)
31
32			reader, _ := os.Open("sample_output.json")
33			decoder := json.NewDecoder(reader)
34
35			var cust Customer
36			err := decoder.Decode(&cust)
37			if err != nil {
38				panic(err)
39			}
40
41			if !reflect.DeepEqual(cust, tt.want) {
42				t.Errorf("EncoderStreaWriterJSON() = %v, want %v", cust, tt.want)
43			}
44		})
45	}
46}

Pada unit test tersebut kita tambahkan Decoder agar kita pastikan isi dari file hasil Encoder itu sesuai dengan yang dikirim dari parameter, maka kita modifikasi sedikit unit test diatas agar bisa melakukan pengecekan lebih dalam pada format isi data JSON tersebut.

Artikel Terkait

💬 Komentar