Golang JSON 09 Penggunaan Streaming Encoder
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
1json.NewEncoder(writer)1Encode(interface{})Penggunaan Stream Encoder
Nah kita coba langsung bagaimana membuat suatu stream Encoder JSON untuk pertama kita perlu membuat fungsi seperti dibawah ini.
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.
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.