İçeriğe geç
Toova
Tüm Araçlar

JSON'dan TypeScript, Go, Python, PHP, Rust'a

Tasarımdan gizli — tamamen tarayıcınızda çalışır

Gerçek bir API yanıtından doğru tip tanımlamalarını çıkarmak, beş saniye sürmesi gerekirken bir şekilde on beş dakika alan görevlerden biridir. Bu araç, tarayıcınızda bir JSON örneğini okur, yapıyı dolaşır ve TypeScript, Go, Python, PHP veya Rust için deyimsel tipler üretir — isteğe bağlı alanlar, ISO tarih algılama ve tamsayı ile ondalık arasındaki doğru ayrımla birlikte.

Çıkarım nasıl çalışır

Araç JSON ağacını bir kez dolaşır ve bir ara temsil oluşturur: ilkel değerler string / int / float / bool / null olur, diziler eleman tipini üyelerinin birliğinden çıkarır ve nesneler alan tipleri değerlerden gelen bir struct üretir. Aynı alan bazı dizi elemanlarında varken diğerlerinde yoksa, isteğe bağlı olarak işaretlenir — üretilen tip kısmi veriyi kırılmadan çözebilir. Ondalık kısmı olmayan sayılar int64 (Go) / int (Python) / i64 (Rust), ondalıklı sayılar ise float64 / float / f64 olarak üretilir. ISO 8601 (`2024-03-15T10:30:00Z`) ile eşleşen dizgeler Date / time.Time / datetime / DateTimeInterface / chrono::DateTime olur.

Dile özgü çıktı stili

Her üretici hedef dilinin kurallarını izler. TypeScript: `?:` sözdizimiyle dışa aktarılan interface'ler. Go: `json:` etiketli struct'lar, isteğe bağlı alanlar `omitempty` ile pointer. Python: `@dataclass`, gerekli alanlar önce ve `Optional[T] = None` sonra (dataclass sıralama kuralı). PHP: katı tipli final sınıflar ve tipli diziler için `@var list<T>` phpdoc ipuçları. Rust: `#[derive(Serialize, Deserialize)]` struct'ları, null olabilen alanlar için `Option<T>` ve Rust snake_case adı JSON anahtarından farklı olduğunda `#[serde(rename)]`.

Ne zaman kullanmalı (ve ne zaman değil)

Bu üretici işin ilk %80'ini çözer: bir payload'dan saniyeler içinde çalışan bir tip tanımı elde etmek. Hassas kısıtlamalara ihtiyacınız olduğunda (dizgeler üzerinde regex, sayılarda min/max, ayrımcı union'lar) elle yazılmış bir şemanın yerini almaz. Bu durumlar için, çıktıyı başlangıç noktası olarak alın ve tipleri sıkılaştırın. İsteğe bağlı alan algılama bir heuristic — örnekteki bilgilere dayanır — bu yüzden mümkünse birkaç farklı örnek geçirin.

Sıkça Sorulan Sorular

Yapıştırdığım JSON tarayıcımdan çıkıyor mu?
Hayır. Ayrıştırıcı, tip çıkarımı ve kod üretimi hepsi sekmenizde JavaScript ile çalışır. Üretirken Ağ panelini açın — sıfır giden istek görürsünüz. Gerçek token'lar ve PII içeren üretim payload'ları için güvenli.
Alanım her zaman bir değere sahip olduğu halde neden isteğe bağlı işaretleniyor?
İsteğe bağlı bayrak, bir dizi alanı olan ve olmayan nesneleri içerdiğinde ayarlanır. Tek bir nesne yapıştırırsanız hiçbir şey isteğe bağlı olarak işaretlenmez. Aynı nesnelerden oluşan bir dizi yapıştırırsanız da işaretlenmez. Bayrak sadece dizi içindeki yapı değiştiğinde tetiklenir.
Tamsayı ile ondalık nasıl ayırt edilir?
JSON'da tek bir sayısal tür vardır. Araç her değeri inceler ve değer ondalık kısma sahip değilse int (`42`, `1000`), sahipse float (`3.14`, `99.0`) üretir. Bir dizi her ikisini karıştırırsa, kayıplı çözmeyi önlemek için tip float'a genişletilir.
ISO tarih dizelerini algılar mı?
Evet. `YYYY-MM-DD` veya `YYYY-MM-DDTHH:MM:SS[.sss][Z|±HH:MM]` ile eşleşen dizeler dilin yerel tarih/saat tipi olarak üretilir (TS'de Date, Go'da time.Time, Python'da datetime, PHP'de DateTimeInterface, Rust'ta chrono::DateTime). Diğer formatlar string olarak kalır.
Üretilen kodu kullanmak için bir şey yüklemem gerekir mi?
TypeScript: hiçbir şey — saf. Go: yalnızca standart kütüphane (ISO tarihleri olduğunda time.Time). Python: standart dataclasses modülü. PHP: yerel tipler. Rust: ISO tarihler varsa serde + chrono gerekir. Geçerli olduğunda başlık/import çıktıya yazılır.
Kök bir nesne dizisi olduğunda tipler üretebilir miyim?
Evet. Kök değer bir nesne dizisi ise, araç eleman için bir struct ve dizi için üst düzey bir tip takma adı üretir. Örneğin, `Users` adlı bir JSON `[{...}, {...}]`, TypeScript'te `User` interface'i artı `type Users = User[];` ya da Rust'ta `pub type Users = Vec<User>;` üretir.