pemrograman

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

json.NewEncoder(writer)

Dan untuk menulis data sebagai JSON langsung sebagai writer kita perlu menggunakan fungsi

Encode(interface{})

Penggunaan Stream Encoder

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

func EncoderStreaWriterJSON(cust Customer) {
	writer, _ := os.Create("sample_output.json")
	encoder := json.NewEncoder(writer)

	err := encoder.Encode(cust)
	if err != nil {
		panic(err)
	}
}

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.

func TestEncoderStreamWriterJSON(t *testing.T) {
	type args struct {
		cust Customer
	}
	tests := []struct {
		name string
		args args
		want Customer
	}{
		{
			name: "success encode strem reader",
			args: args{
				cust: Customer{
					FirstName:  "Santekno",
					MiddleName: "Ihsan",
					LastName:   "Arif",
					Hobbies:    []string{"badminton", "renang", "coding"},
				},
			},
			want: Customer{
				FirstName:  "Santekno",
				MiddleName: "Ihsan",
				LastName:   "Arif",
				Hobbies:    []string{"badminton", "renang", "coding"},
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			EncoderStreaWriterJSON(tt.args.cust)

			reader, _ := os.Open("sample_output.json")
			decoder := json.NewDecoder(reader)

			var cust Customer
			err := decoder.Decode(&cust)
			if err != nil {
				panic(err)
			}

			if !reflect.DeepEqual(cust, tt.want) {
				t.Errorf("EncoderStreaWriterJSON() = %v, want %v", cust, tt.want)
			}
		})
	}
}

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.

comments powered by Disqus