JSON ke Struktur Go
Tempel contoh JSON untuk memperoleh definisi struktur Go yang dapat diproses secara akurat oleh encoding/json. Setiap bidang diekspor (dengan format CamelCase), diberi tag menggunakan kunci JSON asli, diubah menjadi pointer jika nilainya bisa bernilai null, dan objek terstruktur mendapatkan deklarasi struktur tersendiri dengan nama tertentu.
Cara mengonversi JSON ke struktur Go
-
1
Tempel JSON
Satu sampel saja sudah cukup. Penggunaan beberapa sampel dapat meningkatkan akurasi inferensi tipe nullable.
-
2
Pilih nama
Untuk bidang yang diekspor, PascalCase merupakan konvensi standar dalam bahasa Go. Pilih gaya penyingkatan (`URL` vs `Url`, `ID` vs `Id`).
-
3
Pilih strategi opsional
Gunakan pointer untuk bidang yang dapat bernilai null (yang paling umum digunakan), atau tag `omitempty`.
-
4
Salin Struktur-Struktur
Satu struktur akar beserta struktur-struktur yang terletak di dalamnya. Tempelkan ke dalam file `.go`, lalu klik `go build`.
Contoh hasil eksekusi
Untuk:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
Hasil:
type User struct {
FirstName string `json:"first_name"`
Age int `json:"age"`
Email *string `json:"email"`
Tags []string `json:"tags"`
}
Pemetaan Tipe
| Nilai JSON | Jenis Go |
|---|---|
| string | string |
| bilangan bulat | int atau int64 |
| nomor (desimal) | float64 |
| boolean | bool |
| null (dengan saudara yang tidak bernilai null) | *T ( pointer) |
| array | []T |
| objek | Struktur bernama |
| matriks campuran | []interface{} |
Penamaan idiom yang diikuti oleh generator
- Inisial yang ditulis dengan huruf kapital:
id->ID,url->URL,api_key->APIKey. Hal ini sesuai dengan gaya yang direkomendasikan oleh Go (serta aturan untukgo vet/staticcheck). - Bidang Snake_case JSON -> PascalCase:
first_name->FirstName. - Akronim berupa satu kata tetap dipertahankan:
IPtetap menjadiIP, danHTTPtetap menjadiHTTP. - Tag JSON:
json:"first_name"mempertahankan kunci asli sehingga proses pengkodean dan dekoding berjalan secara lancar.
Bidang opsional: pointer atau omitempty?
| Strategi | Digunakan saat |
|---|---|
pointer (*T) |
Anda perlu membedakan “tidak ada” dengan “nilai nol” |
omitempty |
Anda hanya ingin melewatkan nilai nol saat proses marshal; unMarshal akan menyimpan nilai nol untuk data yang tidak tersedia |
| Tidak ada | Bidang tersebut selalu ada dan nilai nol memiliki makna |
Secara default, generator menggunakan pointer + omitempty untuk nilai yang dianggap sebagai null; penyetelan dapat disesuaikan sesuai dengan semantik Anda.
Kesalahan Umum
- Menggunakan
intketika nilai bilangan bulat dalam format JSON melebihi batas yang ditentukan olehMaxInt32pada sistem target berarsitektur 32-bit; gunakanint64untuk nilai yang diketahui berukuran besar. - Penataan ulang urutan dan kehilangan urutan kunci:
encoding/jsonmenghasilkan kunci sesuai urutan deklarasi medan, bukan urutan JSON asli. Harus diurutkan secara manual jika diperlukan keluaran yang kanonik. - Matriks berbentuk campuran.
[]interface{}kehilangan keamanan tipe; pertimbangkan penggunaan tipe unifikasi dengan medan diskriminatortypesebagai penggantinya. - Lupa mengisi kolom
omitemptypada bidang opsional. Jika tidak diisi, kolom opsional akan diserialisasi sebagai"foo": null, bukan diabaikan.
Pertanyaan yang Sering Diajukan
Gunakan pointer ketika perlu membedakan kondisi “field absen” dengan “field bernilai nol”. Gunakan omitempty jika nilai nol bukan nilai bisnis yang sah ("", 0, dan false selalu berarti “lompati nilai ini”). Banyak tim memilih salah satu kode tersebut dan menerapkannya secara konsisten di seluruh basis kode.
Setiap objek terstruktur menjadi deklarasi struktur bernama yang terpisah (misalnya User → Address). Tipe hanya diintegrasikan secara langsung jika struktur terstruktur tersebut sangat kecil dan digunakan sekali; jika tidak, Anda akan mendapatkan tipe yang bersih dan dapat digunakan kembali.
Ya. id berubah menjadi ID, url menjadi URL, dan api_key menjadi APIKey. Inilah yang diharapkan oleh go vet serta yang direkomendasikan oleh sebagian besar panduan gaya penulisan Go.
Generator menghasilkan struktur sederhana dengan tag standar json:. Untuk implementasi khusus UnmarshalJSON (misalnya untuk tanggal dalam format non-ISO), tambahkan tag tersebut secara manual setelah proses generasi selesai.
Alat Terkait
Referensi Tabel ASCII
Tabel ASCII lengkap dari 0 sampai 127 dengan desimal, heksadesimal, oktal, biner, dan referensi karakter numerik HTML untuk setiap karakter, termasuk kode kontrol seperti NUL, LF, dan DEL.
Referensi Karakter HTML
Daftar entitas HTML yang dapat dicari, beserta kode bernama dan kode numeriknya, serta fitur salin dengan satu klik untuk karakter khusus dan simbol.
Referensi pintasan papan ketik
Cari pintasan bawaan terdokumentasi untuk VS Code, Chrome, dan Bash dengan GNU Readline di macOS, Windows, dan Linux.
Pemformat HTML
Format HTML secara lokal di browser dengan inden dua atau empat spasi. HTML tidak diunggah atau divalidasi.
Generator EditorConfig
Buat file .editorconfig dengan gaya dan ukuran indentasi, akhir baris, charset, dan aturan spasi Anda untuk format yang konsisten di berbagai IDE dan editor.
Validator Email
Validasi alamat email: pemeriksaan sintaks RFC 5322, pengecekan live record MX, serta detail bagian lokal, domain, dan panjang. Tidak ada email yang dikirim.
Alat ini tersedia dalam bahasa lain
- JSON zu Go Struct [DE]
- JSON vers Go Struct [FR]
- JSON till Go-struktur [SV]
- JSON을 Go 구조체로 변환 [KO]
- JSON naar Go-structuur [NL]
- JSON إلى بنية Go [AR]
- JSON a Estructura Go [ES]
- JSON→Go構造体 [JA]
- JSON เป็นโครงสร้างข้อมูล Go [TH]
- JSON thành cấu trúc [VI]
- JSON na strukturę Go [PL]
- JSON para Estrutura Go [PT]
- JSON'dan Go Yapısına [TR]
- JSON 至Go结构 [ZH]
- JSON to Go Struct [EN]
- JSON in Struttura Go [IT]
- JSON в структуру данных [RU]