Cara memakai
- Tempel objek JSON di Objek JSON. Seluruh teks harus berupa satu objek, dengan kurung kurawal di bagian atas.
- Ketik Nama struct akar, misalnya Product, dan centang Tambahkan omitempty ke setiap tag jika Anda menginginkan opsi itu.
- Baca Pemeriksaan. Hijau berarti objek berhasil dikonversi; merah menyebutkan tempat masalahnya.
- Salin Kode Go ke berkas yang memiliki klausa package, atau unduh sebagai models.go.
Cara memilih tipe Go
Setiap nilai JSON mendapat tipe Go yang menampungnya. String menjadi string, dan true atau false menjadi bool. Aturan Unmarshal dari encoding/json menentukan cara JSON dibaca kembali ke tipe-tipe ini.
- Bilangan bulat yang muat dalam 64 bit menjadi int64. Angka dengan titik desimal atau eksponen, seperti 1.0 atau 2e3, menjadi float64, begitu juga bilangan bulat yang terlalu besar untuk int64.
- null menjadi any. Null yang berdampingan dengan nilai bertipe lain mengambil tipe itu, karena null membiarkan nilai Go bertipe lain tidak berubah.
- Objek menjadi struct, dan daftar mengambil tipe yang dimiliki item-itemnya bersama. Objek dalam satu daftar digabung menjadi satu struct, dan daftar berisi tipe campuran menjadi []any.
- Objek kosong menjadi struct kosong, dan daftar kosong menjadi []any.
Nama, tag dan benturan
Setiap field mengambil namanya dari nama JSON: kata-katanya digabung dan setiap kata diawali huruf kapital, sehingga user-name menjadi UserName. Spesifikasi Go mengekspor field yang namanya diawali huruf kapital, itulah sebabnya huruf pertama dibuat kapital. Tag json mempertahankan nama seperti yang tertulis, sehingga kunci yang sama cocok ketika JSON dibaca kembali.
Dua nama yang menghasilkan nama Go yang sama mendapat angka, seperti AB dan AB2, dan struct yang namanya sudah dipakai juga mendapat angka. Item daftar diberi nama dari daftarnya, sehingga products menghasilkan struct bernama Product, dan nama tanpa aturan jamak mendapat akhiran Item.
- Nama dengan koma, satu tanda hubung, atau tanpa karakter tidak bisa menjadi tag json, sehingga konverter menyebutkan kunci itu dan berhenti.
- Dengan omitempty aktif, setiap tag mendapat opsi itu. Konverter membuat huruf pertama nama struct akar menjadi kapital, sehingga product menjadi Product.
Yang tidak dilakukan konverter ini
- Ia tidak menambahkan klausa package atau impor. Tempel kodenya ke berkas yang punya klausa package sendiri.
- Ia tidak memakai pointer untuk field opsional. Field yang hilang atau null dalam JSON tidak dibedakan dari field yang berisi nilai nol.
- Ia tidak mengubah nama menjadi akronim umum Go, sehingga id menjadi Id. Ganti nama field secara manual jika gaya kode Anda menginginkan ID.
Contoh kerja: pesanan dengan pemilik dan dua item
JSON di bawah punya satu bilangan bulat, satu desimal, satu objek dan satu daftar berisi dua objek. Tabel menunjukkan field Go yang dihasilkan setiap nama JSON. Konverter menulis tiga struct di bawah tabel, dengan struct luar Order di urutan pertama.
| Nama JSON | Field Go | Tipe Go | Tag |
|---|---|---|---|
| id | Id | int64 | json:"id" |
| ratio | Ratio | float64 | json:"ratio" |
| owner | Owner | Owner | json:"owner" |
| items | Items | []Item | json:"items" |
Pertanyaan yang sering diajukan
Mengapa bilangan bulat menjadi int64, bukan int?
Tipe int64 adalah bilangan bulat bertanda 64 bit tetap, dan ia menampung setiap bilangan bulat dari −9.223.372.036.854.775.808 sampai 9.223.372.036.854.775.807. Konverter ini memakainya untuk setiap bilangan bulat yang muat, sehingga nilainya tidak melampaui batas. Ubah tipenya menjadi int secara manual jika kode Anda membutuhkannya.
Mengapa null menjadi any?
Go tidak punya tipe yang menampung null dengan sendirinya, sehingga konverter memakai any, yang menampung nilai apa pun. Null di sebelah nilai bertipe lain mengambil tipe itu, karena encoding/json membiarkan nilai Go bertipe lain tidak berubah ketika membaca null.
Mengapa field saya bernama Id dan bukan ID?
Konverter membuat huruf pertama setiap kata menjadi kapital dan tidak memakai akronim umum Go, sehingga id menjadi Id. Tag json tetap berbunyi id, sehingga datanya dibaca dengan cara yang sama. Ganti nama field jika gaya kode Anda meminta ID.
Versi Go mana yang dibutuhkan keluarannya?
Keluarannya memakai any untuk null, dan any adalah alias untuk interface{} yang ditambahkan di Go 1.18. Jika kode Anda lebih lama, ganti any dengan interface{}, yang merupakan tipe yang sama.
Mengapa konverter menolak beberapa nama?
Tag json memuat nama, diikuti opsi yang dimulai setelah koma, sehingga nama dengan koma tidak bisa ditulis dalam tag. Tag dengan satu tanda hubung menyembunyikan field, sehingga nama itu juga ditolak.
Apakah JSON yang saya tempel dikirim ke mana pun?
Tidak. Konversinya berjalan di peramban Anda, dan tidak ada yang Anda tempel yang disimpan atau dikirim ke server kami. Jangan tempel kata sandi atau token ke halaman mana pun yang tidak Anda percaya.
Sumber
- Go (dalam bahasa Inggris): encoding/json, aturan Unmarshal dan tag struct
- The Go Programming Language Specification (dalam bahasa Inggris): tipe numerik dan any
Angka dan teks terakhir diperiksa pada Kamis, 12 November 2026.