Generator struct JSON ke TypeScript / Go / Rust
Tempel JSON, pilih bahasa target, dapatkan definisi tipe yang idiomatis. Mendukung TypeScript, Go, Rust, Kotlin, Java, C#, dan Python TypedDict. Didukung quicktype, berjalan di browser.
- Tempel sampel JSON representatif ke area teks kiri.
- Pilih bahasa target dari dropdown Target.
- Klik Buat. Klik pertama memuat engine (~2–3 detik di koneksi 4G); generasi berikutnya instan.
- Salin hasilnya, atau unduh dengan ekstensi file yang benar.
Apa fungsinya?
Menghasilkan tipe idiomatis dalam bahasa target Anda dengan menyimpulkan skema dari satu atau lebih sampel JSON. Tipe field disimpulkan — string tetap string, angka menjadi tipe numerik bahasa, boolean menjadi bool, array menjadi slices/list/array, objek bersarang menjadi tipe bersarang. Field opsional (yang kadang null atau hilang antar sampel) ditandai sebagai nullable di output. Didukung oleh quicktype-core, mesin yang sama di balik quicktype.io.
Contoh
Input JSON:
{
"name": "Ada",
"age": 36,
"active": true,
"tags": ["math", "logic"]
} Output TypeScript (target = TypeScript, nama tipe = User):
export interface User {
name: string;
age: number;
active: boolean;
tags: string[];
} Jebakan umum dan cara menanganinya
Inferensi tipe dari JSON memiliki batasan fundamental — JSON tidak membawa cukup informasi untuk membatasi sistem tipe sepenuhnya. Pola di bawah mencakup di mana tipe yang disimpulkan mungkin tidak sesuai dengan yang Anda inginkan.
- Opsional vs. wajib dari satu sampel. Satu objek JSON tidak bisa memberi tahu generator field mana yang opsional. Berikan beberapa sampel (tempel array JSON dari objek representatif) sehingga generator dapat menandai field yang kadang hilang sebagai opsional.
- Array kosong. `{"items": []}` menghasilkan array `any` — generator tidak punya elemen untuk disimpulkan. Sertakan setidaknya satu contoh terisi, atau perbaiki tipe secara manual setelah generasi.
- Elemen array heterogen. Array JSON `[1, "two"]` menjadi tipe union — hasilnya mungkin tidak ergonomis di beberapa bahasa target (terutama Go). Jika array seharusnya homogen di data nyata Anda, perbaiki sampel.
- String tanggal. JSON tidak punya tipe Date. String tanggal ISO 8601 disimpulkan sebagai `string`. quicktype kadang dapat mendeteksinya sebagai Date di output TypeScript — sesuaikan secara manual jika ingin tipe lebih kuat.
- ID numerik yang kehilangan presisi. Angka JSON > 2^53 (ID 64-bit besar) kehilangan presisi saat di-parse JavaScript. Tipe TypeScript yang dihasilkan tetap menggunakan `number`. Untuk presisi 64-bit, gunakan `string` di JSON Anda atau migrasi ke tipe `bigint` secara manual.
- Field underscore vs. camelCased. Generator mempertahankan penamaan field JSON. Jika JSON Anda menggunakan snake_case tapi bahasa target mengharapkan camelCase, output menggunakan field snake_case dengan anotasi serde/json di mana berlaku. Timpa dengan pasca-pemrosesan atau menggunakan flag CLI quicktype.
Pertanyaan yang sering diajukan
Mengapa Buat pertama lambat?
Bundle mesin quicktype sekitar 465 KB gzipped. Memuat pada klik Buat pertama, yang memakan 2–3 detik di koneksi 4G. Setelah itu modul di-cache untuk sisa sesi halaman — dan browser meng-cache antar kunjungan, jadi klik pertama berikutnya juga instan kecuali cache telah dibersihkan.
Bisakah saya membuat dari beberapa sampel JSON?
Bungkus sampel Anda dalam array JSON dan tempel arraynya. Generator menyimpulkan union dari field yang terlihat antar sampel dan menandai field sebagai opsional ketika hilang dari setidaknya satu. Ini cara yang tepat untuk memastikan tipe yang dihasilkan menoleransi variasi dalam data nyata.
Bahasa apa yang harus saya pilih untuk kode backend?
Sesuaikan dengan apa yang sudah digunakan proyek Anda. Output Go menggunakan tag struct standar untuk `encoding/json`. Rust menggunakan serde derives. Kotlin menggunakan anotasi kotlinx.serialization. Java menghasilkan POJO yang kompatibel dengan Jackson. Pilihan bersifat spesifik proyek, bukan berbasis preferensi.
Apakah komentar field dipertahankan?
JSON tidak memiliki sintaks komentar, jadi tidak ada komentar di input untuk dibawa. quicktype dapat memasukkan doc comments di output untuk beberapa bahasa — ini deskripsi yang dihasilkan otomatis, bukan konten pengguna.
Apakah JSON saya diunggah?
Tidak. Semua berjalan di browser Anda — input Anda diproses lokal oleh modul JavaScript quicktype-core di halaman ini. quicktype-core sendiri memuat dari origin yang sama (host aset statis situs ini); tidak ada server pihak ketiga yang melihat data Anda.
Berapa besar sampel JSON yang bisa saya gunakan?
Hingga sekitar 5 MB JSON sebelum generator mulai memakan waktu yang terlihat. Generator dirancang untuk sampel representatif, bukan dataset penuh — biasanya beberapa objek cukup untuk menyimpulkan skema yang bersih.