logo
GeekFormat

JSON ke Go

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

  1. Tempel konten JSON di editor kiri, atau seret dan lepas file .json/.txt, atau klik 'Contoh' untuk memuat data bawaan.
  2. Tunggu sekitar 400ms, alat akan mengonversi secara otomatis dan menampilkan kode struct Go yang dihasilkan di kanan.
  3. Jika JSON memiliki kesalahan, klik tombol 'Perbaiki JSON' untuk memperbaiki kesalahan format umum secara otomatis kemudian lanjutkan generasi.
  4. 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

go

Setelah 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

go

Jika 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 JSONTipe Go yang DihasilkanCatatan
"hello"stringPemetaan string langsung
true / falseboolNilai boolean
42int64Bilangan tanpa titik desimal
3.14float64Bilangan dengan titik desimal
nullinterface{}Keamanan default ketika tipe spesifik tidak dapat diinferensikan
["a","b"][]stringArray string
[1,2,3][]int64Array bilangan bulat
[{...},{...}][]UserItemArray objek, tipe elemen dihasilkan secara rekursif
{"id":1}UserObjek menghasilkan struct independen

Rekomendasi Pemilihan Tipe Numerik Umum di Go

Alat menggunakan int64 dan float64 secara default; sesuaikan sesuai kebutuhan dalam proyek nyata:

SkenarioTipe yang DirekomendasikanAlasan
ID bilangan bulat umum, hitunganint64Konsisten dengan default alat, kompatibel dengan sebagian besar angka JSON
PK autoincrement basis data diketahui positifuint64Menghindari bilangan negatif, semantik lebih jelas
Sistem 32-bit atau bilangan bulat rentang kecil eksplisitint32Mengurangi konsumsi memori
Harga, koordinat, komputasi ilmiahfloat64Konsisten dengan default alat, presisi float standar
Perhitungan mata uang presisidecimal.Decimal / intfloat64 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.