JSON ke Go
Belum ada konten
Tempel JSON di sebelah kiri, dan definisi tipe struct Go yang siap digunakan langsung dalam proyek Go akan dihasilkan secara otomatis di sebelah kanan. Pemrosesan lokal murni di browser, tanpa pendaftaran atau unggahan diperlukan.
Rekomendasi Terkait
Tentang JSON ke Go: Mengubah JSON menjadi struct bertipe kuat Go
JSON ke Go adalah proses mengonversi data dalam format JSON secara otomatis ke definisi tipe struct bahasa Go. JSON adalah format pertukaran data yang paling umum dalam API REST, file konfigurasi, antrean pesan dan log, sedangkan Go adalah bahasa bertipe kuat; selama pengembangan, struktur dinamis JSON sering perlu dipetakan ke struct sebelum deserialisasi dengan encoding/json. Menulis struct secara manual, terutama objek bersarang, dengan mudah menyebabkan bidang yang hilang atau tipe yang salah; alat ini bertujuan untuk mengotomatiskan pekerjaan berulang.
Struct Go adalah tipe data komposit, dideklarasikan dengan `type Name struct { ... }`. Setiap bidang terdiri dari nama dan tipe; nama bidang harus dimulai dengan huruf kapital agar dapat diakses oleh paket lain, yang disebut 'identifier yang diekspor'. Alat secara otomatis mengonversi nama bidang JSON ke nama bidang yang diekspor PascalCase, mis. `user_name` memetakan ke `UserName`, dengan kunci asli dipertahankan dalam tag json.
Konversi inti alat ini dilakukan oleh Web Worker jsonFormat di browser, memanggil renderer Go quicktype-core dengan opsi `just-types` dan `no-comments`. Seluruh aliran tidak bergantung pada layanan backend: JSON input diparsing secara lokal, tipe diinferensikan, kode Go dihasilkan, akhirnya disajikan di editor kanan.
Inferensi tipe mengikuti pemetaan konvensional JSON ke Go: string memetakan ke `string`, boolean ke `bool`, bilangan bulat ke `int64`, float ke `float64`, array ke slice `[]T`, objek ke struct independen, `null` ke `interface{}`. Objek bersarang diproses secara rekursif, menjaga hierarki yang jelas.
Dibandingkan dengan penulisan manual, kode yang dihasilkan alat adalah 'draf pertama yang dapat dijalankan'. Pengembang biasanya hanya perlu menyesuaikan nama tipe akar, nama paket, presisi tipe bidang (mis. int64 ke int) dan apakah akan menggunakan tipe pointer, sebelum ditempatkan dalam proyek Go yang sebenarnya. Dikombinasikan dengan salin satu klik dan unduh model.go, pekerjaan berulang dalam fase integrasi dan pemodelan berkurang secara signifikan.
Kasus penggunaan
- Pengembangan backend Go mengonversi JSON respons REST API ke struct, mengikat langsung ke parameter handler Gin/Echo/Fiber dengan json.Unmarshal
- Selama integrasi frontend-backend, mengambil JSON respons contoh dari Postman, dengan cepat menghasilkan model Go untuk mengurangi pengetikan bidang manual
- Saat mengintegrasikan callback Webhook pihak ketiga, mengonversi JSON payload ke struct Go untuk akses dan validasi tingkat bidang yang praktis
- Mengonversi file konfigurasi JSON dari Viper/Consul/Nacos ke tipe Go, menggantikan akses map[string]interface{} yang bertipe lemah
- Tim layanan mikro menyatukan struktur permintaan/respons untuk antarmuka gRPC/HTTP, mengonversi JSON contoh ke tipe Go yang dibagikan
- Insinyur pengujian mengonversi fixture JSON ke struct Go, gunakan dengan testify untuk pengujian berbasis asersi
- DevOps menganalisis baris log JSON yang dikumpulkan oleh ELK/Fluentd, menghasilkan struct untuk analisis terstruktur dengan program Go
- Setelah crawler mengekstrak data JSON, mengonversi ke struct Go, bekerja dengan gorm/gen atau ent untuk menghasilkan model basis data
- Data telemetri JSON yang dilaporkan oleh perangkat IoT dikonversi ke struct Go, deserialisasi dan penyaringan dalam program gateway edge
- Mengonversi pesan JSON yang dikonsumsi dari Kafka/NATS/RabbitMQ ke tipe Go, untuk implementasi konsumen berbasis peristiwa
- Pengembang SDK mengonversi JSON respons contoh server ke struct Go, menulis ke paket types pustaka klien untuk referensi pengguna
- Mengonversi JSON contoh dari dokumentasi Swagger/OpenAPI ke struct Go sebagai contoh kode dokumentasi antarmuka
- Siswa atau instruktur mengonversi JSON contoh ke struct selama kursus Go, mendemonstrasikan sistem tipe Go dan penggunaan tag json
- Skrip migrasi data mengonversi baris JSON yang diekspor dari MySQL/PostgreSQL ke struct Go, untuk pemetaan bidang dan validasi tipe
- JSON konfigurasi CI/CD dikonversi ke struct Go, praktis untuk pembacaan konfigurasi bertipe kuat dalam alat pipeline yang ditulis dalam Go
- Proyek warisan merefaktor kode pembacaan JSON dinamis berbasis map ke akses berbasis struct bertipe kuat
Cara Penggunaan
- Tempel konten JSON di editor kiri, atau seret dan lepas file .json/.txt, atau klik 'Contoh' untuk memuat data bawaan.
- Tunggu sekitar 400ms, alat akan mengonversi secara otomatis dan menampilkan kode struct Go yang dihasilkan di kanan.
- Jika JSON memiliki kesalahan, klik tombol 'Perbaiki JSON' untuk memperbaiki kesalahan format umum secara otomatis kemudian lanjutkan generasi.
- Periksa keluaran kanan, klik 'Salin' untuk menempel ke proyek Go, atau klik 'Unduh' untuk menyimpan sebagai file model.go.
Fitur
- Generasi struct Go lokal di browser: parsing JSON dan generasi kode Go selesai di browser, data mentah tidak diunggah ke server
- Konversi otomatis dengan debounce 400ms: tidak perlu klik manual setelah menempel atau mengubah, kode Go yang dapat disalin ditampilkan secara real-time di kanan
- Inferensi tipe cerdas: string memetakan ke string, boolean ke bool, bilangan bulat ke int64, float ke float64, array ke slice, objek ke struct
- Ekspansi otomatis objek bersarang: menghasilkan tipe struct independen secara rekursif, menjaga hierarki JSON yang jelas
- Tag json yang dihasilkan otomatis: bidang menyertakan tag `json:"nama_asli"`, siap digunakan dengan encoding/json
- Perbaikan kesalahan JSON satu klik: secara otomatis menangani koma trailing, kutip tunggal, kutip yang hilang dan kesalahan format umum lainnya, melanjutkan generasi setelah perbaikan
- Mendukung input tempel/unnggah/contoh: seret dan lepas file .json/.txt, atau muat contoh bahasa Tionghoa bawaan
- Salin dan unduh satu klik: salin seluruh kode Go ke papan klip, atau unduh sebagai file model.go langsung ke proyek
- Riwayat input localStorage: secara otomatis menyimpan input terbaru, pemulihan cepat setelah refresh atau penutupan halaman yang tidak disengaja
- Editor layar terbagi responsif: lebar panel kiri/kanan dapat disesuaikan, tampilan input/output yang nyaman di desktop dan mobile
Contoh Kode
Deserialisasi JSON dengan struct yang dihasilkan
goSetelah menyalin struct yang dihasilkan ke proyek, deserialisasi respons API langsung dengan encoding/json.
package main
import (
"encoding/json"
"fmt"
)
// Kode yang dihasilkan oleh alat GeekFormat JSON ke Go
type User struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
Address Address `json:"address"`
}
type Address struct {
City string `json:"city"`
}
func main() {
data := []byte(`{
"id": 1,
"name": "Alice",
"tags": ["admin", "dev"],
"address": {"city": "Beijing"}
}`)
var u User
if err := json.Unmarshal(data, &u); err != nil {
panic(err)
}
fmt.Println(u.Name, u.Address.City)
}Menangani JSON dengan bidang yang berpotensi hilang
goJika beberapa bidang API mungkin tidak ada, ubah bidang terkait ke tipe pointer atau gunakan dengan tag omitempty.
package main
import "encoding/json"
// Ubah bidang secara manual ke pointer; ketika hilang, nilainya adalah nil
type User struct {
ID *int64 `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
}
func main() {
data := []byte(`{"id": 1, "name": "Bob"}`)
var u User
json.Unmarshal(data, &u)
if u.Email == nil {
println("Bidang Email hilang")
}
}Pertanyaan Umum
Bagaimana cara mengonversi JSON ke struct Go?
Tempel konten JSON ke kotak input kiri, alat akan mengonversi secara otomatis dalam 400ms dan menampilkan struct Go yang dihasilkan di kanan. Anda juga dapat menyeret dan melepas file .json/.txt, atau klik 'Contoh' untuk memuat data bawaan. Setelah konversi, salin atau unduh file model.go dalam satu klik.
Apakah kode Go yang dihasilkan menyertakan tag json?
Ya. Alat menghasilkan kode Go berdasarkan quicktype-core, dan secara default setiap bidang struct menyertakan tag `json:"nama_asli"`, praktis untuk serialisasi dan deserialisasi langsung dengan Unmarshal/Marshal dari encoding/json.
Apakah array JSON akan dikonversi ke slice Go?
Ya. Array JSON menghasilkan tipe slice yang sesuai berdasarkan tipe elemen, mis. `["a","b"]` menghasilkan `[]string`, `[1,2,3]` menghasilkan `[]int64`, `[{...},{...}]` menghasilkan tipe kustom seperti `[]UserItem`.
Apakah objek bersarang akan menghasilkan beberapa struct?
Ya. Setiap objek bersarang menghasilkan tipe struct independen secara rekursif, dinamai dalam PascalCase. Misalnya, objek `address` menghasilkan struct `Address`, direferensikan di struct utama melalui bidang `Address Address`.
Tipe apa yang dihasilkan nilai null?
Nilai null dalam JSON biasanya diinferensikan sebagai `interface{}`, yang merupakan tipe keamanan default. Jika Anda mengetahui tipe sebenarnya dari bidang tersebut, Anda dapat menambahkan nilai contoh dalam JSON, menghasilkan ulang, kemudian menyesuaikan secara manual ke tipe spesifik.
Dapatkah saya menyesuaikan nama struct akar?
Ya. Alat menggunakan nama tipe akar (seperti User) secara default; setelah mengubah nama tipe akar di pengaturan, semua nama subtipe terkait diperbarui secara sinkron, nama file yang diunduh juga berubah sesuai.
Bagaimana jika JSON memiliki kesalahan format?
Alat secara otomatis mendeteksi validitas JSON. Jika ada kesalahan umum seperti koma trailing, kutip tunggal, kutip yang hilang, tombol 'Perbaiki JSON' akan muncul. Dengan mengklik, alat akan mencoba perbaikan otomatis dan menghasilkan ulang struct Go; ketika perbaikan gagal, lokasi kesalahan spesifik akan ditunjukkan.
Apakah data akan diunggah ke server? Apakah privat dan aman?
Tidak. Semua parsing JSON, inferensi tipe dan generasi kode Go diselesaikan di browser Anda melalui Web Worker; konten input dan kode yang dihasilkan tidak pernah diunggah ke server mana pun, juga tidak dicatat ke cloud. JSON sensitif yang berisi kunci API, token atau data bisnis dapat digunakan dengan aman.
Dapatkah kode yang dihasilkan ditempatkan langsung dalam proyek Go?
Ya. Kode yang dihasilkan adalah struct Go standar dengan tag json, dapat langsung disalin ke direktori types/ atau models/ proyek. Kami menyarankan untuk menyesuaikan nama tipe dan nama paket sesuai konvensi penamaan proyek.
Apakah alat ini gratis? Apakah saya perlu mendaftar?
Sepenuhnya gratis, tanpa pendaftaran atau login diperlukan. Buka halaman dan gunakan segera, tanpa batasan fitur, tanda air atau login paksa.
Berapa ukuran file JSON yang didukung?
Alat tidak memiliki batasan ukuran file yang ketat, tetapi kecepatan konversi dan kinerja rendering bergantung pada kinerja browser dan perangkat. Kami menyarankan untuk memproses JSON dalam 1MB untuk pengalaman terbaik; untuk JSON yang terlalu besar, proses terlebih dahulu dengan formatter JSON atau alat pemisah.
Akankah tipe numerik menghasilkan float64 secara seragam?
Tidak. Alat membedakan bilangan bulat dan float: bidang bilangan bulat menghasilkan int64, bidang float menghasilkan float64. Jika Anda lebih suka tipe yang lebih spesifik seperti int, uint64, ganti secara manual setelah generasi.
Pemecahan Masalah
Di kanan menampilkan 'Silakan masukkan data JSON'
Kotak input kiri kosong atau hanya berisi spasi putih. Silakan tempel JSON yang valid, atau klik 'Contoh' untuk memuat data, atau seret dan lepas file .json/.txt.
Menampilkan kegagalan parsing JSON tetapi tidak dapat menemukan lokasi kesalahan
Klik tombol 'Perbaiki JSON' di bawah kotak input; alat akan secara otomatis mencoba memperbaiki koma trailing, kutip tunggal, kutip yang hilang, objek gaya JS dan masalah lainnya. Hasil yang dimodifikasi akan disorot setelah perbaikan.
Nama bidang yang dihasilkan tidak sesuai dengan konvensi penamaan Go
Alat menghasilkan nama bidang PascalCase dari kunci JSON. Jika kunci berisi bahasa Tionghoa atau karakter khusus, nama bidang yang di-escape dapat dihasilkan. Kami menyarankan untuk mengubah kunci JSON ke bahasa Inggris kecil atau snake_case, kemudian menyesuaikan secara seragam setelah generasi.
Bidang null menghasilkan interface{}, ingin mengubah ke tipe spesifik
Karena null tidak dapat menginferensikan tipe spesifik, alat menggunakan interface{} sebagai keamanan. Anda dapat memberikan bidang ini nilai contoh (seperti "" atau 0) dalam JSON sumber, menghasilkan ulang kemudian mengubah tipe ke tipe sebenarnya seperti string/int64.
Halaman melambat setelah konversi JSON besar
Rendering browser dari JSON yang terlalu besar dan sejumlah besar struct mengonsumsi banyak memori. Rekomendasi: ① pertahankan hanya bidang kunci dalam JSON contoh; ② bagi menjadi beberapa objek dan konversi secara terpisah; ③ tutup tab lain yang mengonsumsi memori di browser.
Tipe elemen array diinferensikan sebagai []interface{}
Ketika array kosong [] atau tipe elemen tidak konsisten, alat menggunakan interface{} sebagai keamanan. Anda dapat menambahkan elemen contoh dengan tipe yang sama, atau mengubah tipe secara manual ke tipe slice spesifik seperti []string, []int64 setelah generasi.
Glosarium
- struct
- Tipe data komposit Go yang digunakan untuk menggabungkan beberapa bidang menjadi satu tipe. Isi utama kode Go yang dihasilkan oleh alat ini terdiri dari beberapa definisi struct.
- slice
- Tipe array dinamis Go, sintaks []T. Alat ini memetakan array JSON ke slice yang sesuai, mis. []string, []int64, []UserItem.
- json tag
- String di antara backtick setelah bidang struct Go, mis. `json:"user_name"`, digunakan untuk menentukan nama bidang selama serialisasi/deserialisasi encoding/json. Alat ini secara otomatis menghasilkan tag ini.
- interface{}
- Tipe antarmuka kosong Go, dapat mewakili nilai apa pun. Alat ini menggunakan interface{} sebagai keamanan default saat menemui null JSON atau tipe yang tidak ditentukan.
- PascalCase
- Gaya penamaan di mana setiap kata dimulai dengan huruf kapital, mis. UserName, AddressCity. Go mengharuskan bidang yang diekspor dimulai dengan huruf kapital, jadi alat ini secara otomatis mengonversi nama bidang JSON ke PascalCase.
- encoding/json
- Paket encoding/decoding JSON di pustaka standar Go. Setelah struct yang dihasilkan oleh alat ini dipasangkan dengan tag json, json.Unmarshal dan json.Marshal dapat digunakan langsung.
- unmarshal
- Proses memparsing aliran byte JSON menjadi nilai Go. Setelah menghasilkan struct, penggunaan yang paling umum adalah memanggil json.Unmarshal(data, &user).
- omitempty
- Opsi umum untuk tag json Go, mis. `json:"name,omitempty"`, berarti mengabaikan output ketika bidang adalah nilai nol. Alat ini tidak menghasilkan omitempty secara default; tambahkan secara manual sesuai kebutuhan setelah generasi.
Tabel Referensi Pemetaan Tipe JSON ke Tipe Go
Alat ini secara otomatis menginferensikan tipe Go yang sesuai berdasarkan tipe nilai JSON; pemetaan umum adalah sebagai berikut:
| Contoh Nilai JSON | Tipe Go yang Dihasilkan | Catatan |
|---|---|---|
"hello" | string | Pemetaan string langsung |
true / false | bool | Nilai boolean |
42 | int64 | Bilangan tanpa titik desimal |
3.14 | float64 | Bilangan dengan titik desimal |
null | interface{} | Keamanan default ketika tipe spesifik tidak dapat diinferensikan |
["a","b"] | []string | Array string |
[1,2,3] | []int64 | Array bilangan bulat |
[{...},{...}] | []UserItem | Array objek, tipe elemen dihasilkan secara rekursif |
{"id":1} | User | Objek menghasilkan struct independen |
Rekomendasi Pemilihan Tipe Numerik Umum di Go
Alat menggunakan int64 dan float64 secara default; sesuaikan sesuai kebutuhan dalam proyek nyata:
| Skenario | Tipe yang Direkomendasikan | Alasan |
|---|---|---|
| ID bilangan bulat umum, hitungan | int64 | Konsisten dengan default alat, kompatibel dengan sebagian besar angka JSON |
| PK autoincrement basis data diketahui positif | uint64 | Menghindari bilangan negatif, semantik lebih jelas |
| Sistem 32-bit atau bilangan bulat rentang kecil eksplisit | int32 | Mengurangi konsumsi memori |
| Harga, koordinat, komputasi ilmiah | float64 | Konsisten dengan default alat, presisi float standar |
| Perhitungan mata uang presisi | decimal.Decimal / int | float64 memiliki risiko presisi; merekomendasikan shopspring/decimal atau int dalam satuan sen |
Privacy & Security
Semua pemrosesan alat JSON ke Go ini diselesaikan sepenuhnya secara lokal di browser Anda: parsing JSON, inferensi tipe, generasi kode Go semuanya dieksekusi di sisi klien melalui Web Worker; konten JSON input, file yang diunggah dan kode Go yang dihasilkan tidak pernah diunggah ke server mana pun, juga tidak dicatat, di-cache atau disimpan ke cloud. Setelah menutup atau menyegarkan halaman, semua konten input dan output secara otomatis dibersihkan dari memori, hanya localStorage menyimpan riwayat input terbaru Anda (dapat dihapus kapan saja). Cocok untuk memproses JSON yang berisi kunci API, token, data bisnis sensitif.
- Kompres JSON
- CSV ke JSON
- JSON ke CSV
- JSON Diff
- JSON Escape / Unescape
- Meratakan JSON
- Pemformat JSON
- Generator JSON
- Kueri JSONPath
- Penggabungan JSON
- Perbaikan JSON
- Validator Skema JSON
- Urutkan JSON
- JSON Stringify
- JSON ke HTML
- JSON ke Java
- JSON ke Markdown
- JSON ke SQL
- JSON ke TOML
- JSON ke TypeScript
- XML ke JSON
- Ubah JSON ke XML
- YAML ke JSON
- JSON → YAML
- JSON ke Python
- JSON ke Go
- JSON ke Rust
- JSON ke Swift
- JSON ke C#
- JSON ke C++
- JSON ke PHP