JSON ke TypeScript, Go, Python, PHP, Rust
Privasi sejak awal — berjalan sepenuhnya di peramban Anda
Menyimpulkan definisi tipe yang benar dari respons API nyata adalah pekerjaan yang seharusnya selesai dalam lima detik tetapi sering menghabiskan lima belas menit. Alat ini membaca sampel JSON di browser Anda, menyusuri struktur, dan menghasilkan tipe idiomatik untuk TypeScript, Go, Python, PHP, atau Rust — dengan field opsional, deteksi tanggal ISO, dan pemisahan integer vs float yang benar.
Cara kerja inferensi
Alat menyusuri pohon JSON sekali, membangun representasi antara: primitif menjadi string / int / float / bool / null, array menyimpulkan tipe elemen dari gabungan anggotanya, dan objek menghasilkan struct yang tipe field-nya berasal dari nilai. Ketika field muncul di sebagian elemen array dan tidak di yang lain, ia ditandai opsional — tipe yang dihasilkan dapat memparsing data parsial tanpa error. Angka tanpa bagian pecahan dihasilkan sebagai int64 (Go) / int (Python) / i64 (Rust), dengan bagian pecahan sebagai float64 / float / f64. String yang cocok ISO 8601 (`2024-03-15T10:30:00Z`) menjadi Date / time.Time / datetime / DateTimeInterface / chrono::DateTime.
Gaya output per bahasa
Setiap emitter mengikuti konvensi bahasa target. TypeScript: interface yang diekspor dengan sintaks `?:`. Go: struct dengan tag `json:`, field opsional sebagai pointer dengan `omitempty`. Python: `@dataclass` dengan field wajib lebih dulu dan `Optional[T] = None` di akhir (aturan urutan dataclass). PHP: kelas final dengan typing ketat dan petunjuk phpdoc `@var list<T>` untuk array bertipe. Rust: struct `#[derive(Serialize, Deserialize)]`, `Option<T>` untuk field nullable, dan `#[serde(rename)]` ketika nama snake_case di Rust berbeda dari kunci JSON.
Kapan menggunakannya (dan kapan tidak)
Generator ini menyelesaikan 80% pertama dari pekerjaan: mendapatkan definisi tipe yang bekerja dari payload dalam hitungan detik. Ia tidak menggantikan schema yang ditulis tangan ketika Anda membutuhkan batasan presisi (regex pada string, min/max pada angka, union diskriminasi). Untuk itu, gunakan output sebagai titik awal dan perketat tipe. Deteksi opsional bersifat heuristis — berdasarkan apa yang ada di sampel — jadi lewati beberapa sampel beragam jika memungkinkan.
Pertanyaan yang Sering Diajukan
- Apakah JSON yang saya tempel keluar dari browser saya?
- Tidak. Parser, inferensi tipe, dan emisi kode semua berjalan dalam JavaScript di tab Anda. Buka panel Network saat membangkitkan — nol permintaan keluar. Aman untuk payload produksi dengan token nyata dan PII.
- Mengapa field saya ditandai opsional padahal selalu ada nilainya?
- Flag opsional diset ketika sebuah array berisi objek dengan field tersebut dan objek tanpa field tersebut. Jika Anda menempel satu objek, tidak ada yang menjadi opsional. Jika Anda menempel array objek identik, juga tidak. Flag aktif hanya saat struktur di dalam array bervariasi.
- Bagaimana integer dan float dibedakan?
- JSON hanya punya satu tipe numerik. Alat memeriksa setiap nilai dan menghasilkan int saat tanpa bagian pecahan (`42`, `1000`) dan float saat ada (`3.14`, `99.0`). Jika array mencampur keduanya, tipe diperlebar ke float untuk menghindari dekoding lossy.
- Bisakah ia mendeteksi string tanggal ISO?
- Ya. String yang cocok pola `YYYY-MM-DD` atau `YYYY-MM-DDTHH:MM:SS[.sss][Z|±HH:MM]` dihasilkan sebagai tipe tanggal/waktu native bahasa (Date di TS, time.Time di Go, datetime di Python, DateTimeInterface di PHP, chrono::DateTime di Rust). Format lain tetap sebagai string.
- Apakah saya perlu menginstal sesuatu untuk menggunakan kode yang dihasilkan?
- TypeScript: tidak — murni. Go: hanya pustaka standar (time.Time saat ada tanggal ISO). Python: modul dataclasses standar. PHP: tipe native. Rust: butuh serde + chrono jika ada tanggal ISO. Header/import ditulis ke output bila relevan.
- Bisakah saya membangkitkan tipe untuk array objek di root?
- Ya. Jika nilai root adalah array objek, alat menghasilkan struct untuk elemen dan alias tipe tingkat atas untuk array. Contoh: JSON `[{...}, {...}]` bernama `Users` menghasilkan interface `User` plus `type Users = User[];` di TypeScript, atau `pub type Users = Vec<User>;` di Rust.