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.