Bikin JSON Lebih Rapi di Go dengan MarshalIndent
JSON itu format yang simpel, tapi kalau datanya panjang dan ditulis dalam satu baris… pusing juga bacanya 🤯. Untungnya, di Go ada cara gampang buat bikin JSON lebih rapi: pakai pretty-printing.
Dengan pretty-print, JSON kita dikasih indentasi dan baris baru, jadi jauh lebih enak dibaca. Cocok banget buat debugging, ngecek API response, atau sekadar bikin output keliatan lebih manusiawi.
1. json.MarshalIndent
: Jalan Paling Cepat
Go punya fungsi bawaan json.MarshalIndent
buat nge-format JSON biar rapi.
Contoh:
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := map[string]interface{}{
"name": "Alice",
"age": 30,
"address": map[string]string{
"street": "123 Main St",
"city": "Wonderland",
},
"hobbies": []string{"reading", "hiking", "coding"},
}
prettyJSON, err := json.MarshalIndent(data, "", " ")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(prettyJSON))
}
MarshalIndent
butuh tiga argumen: data, prefix (biasanya kosong ""
), dan indentasi (misalnya empat spasi " "
).
2. Jangan Lupa Cek Error
Karena MarshalIndent
bisa gagal (misalnya data nggak bisa diubah ke JSON), kita wajib cek error-nya.
prettyJSON, err := json.MarshalIndent(data, "", " ")
if err != nil {
fmt.Println("Error marshalling JSON:", err)
return
}
Keliatan sepele, tapi penting banget buat program yang aman.
3. Pretty-Print JSON dari File
Mau rapiin JSON yang datang dari file? Bisa juga.
fileContent, err := os.ReadFile("data.json")
if err != nil {
log.Fatalf("Error reading file: %v", err)
}
var data interface{}
if err := json.Unmarshal(fileContent, &data); err != nil {
log.Fatalf("Error unmarshalling JSON: %v", err)
}
prettyJSON, _ := json.MarshalIndent(data, "", " ")
fmt.Println(string(prettyJSON))
Triknya: Unmarshal
dulu ke interface{}
, baru di-marshal ulang dengan indentasi.
4. Buat Output API Lebih Cakep
Kalau lagi bikin API, kadang enak juga balikin JSON yang sudah di-pretty-print biar gampang dibaca saat debug.
func handler(w http.ResponseWriter, r *http.Request) {
data := map[string]interface{}{
"status": "success",
"data": map[string]string{
"message": "Hello, World!",
},
}
prettyJSON, err := json.MarshalIndent(data, "", " ")
if err != nil {
http.Error(w, "Error marshalling JSON", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(prettyJSON)
}
Kesimpulan
- Butuh JSON yang lebih gampang dibaca? → pakai
json.MarshalIndent
. - Bisa dipakai langsung dari data, file, sampai respons API.
- Jangan lupa selalu cek error biar program nggak gampang crash.
Satu baris tambahan bisa bikin JSON yang tadinya bikin sakit mata jadi nyaman dibaca.