Skip to content

JSON'dan Rust Struct Dönüştürücü

JSON yapıştırın, anında idiomatik Rust serde struct'ları alın, %100 tarayıcınızda. Doğru i64/u64/f64 türleri, null'lar için Option, camelCase için #[serde(rename)]. Ücretsiz.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Seçenekler
0 karakter
Rust Çıktı
0 satır
Çıktı, gerçek dünya API yükleri için serde semantiği ve rustfmt biçimlendirmesine göre doğrulandı. — Go Tools Team · Jul 2, 2026

JSON'dan Rust'a dönüştürme nedir?

JSON'dan Rust'a dönüştürme, bir JSON örneğini serde'nin #[derive(Serialize, Deserialize)] makrolarıyla derlemeye hazır Rust struct'larına çevirir; böylece API yanıtları veya yapılandırma dosyaları için elle deserializasyon tekrar kodu yazmazsınız. Bu hızlı Rust struct oluşturucu, doğru sayı türlerini çıkarsar, bulunmayan alanları Option olarak işaretler ve snake_case olmayan anahtarlar için #[serde(rename)] ekler — hepsi %100 tarayıcınızda.

Örnekler

API yanıtı

{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub id: i64,
    pub name: String,
    pub email: String,
    pub active: bool,
    pub roles: Vec<String>,
}

Tipik bir REST yükü, istemcinize bırakabileceğiniz serde'ye hazır bir struct'a dönüşür. Sayılar i64 olarak çıkarsanır, diziler Vec<String> olur.

İç içe nesne

{"repo":"serde","owner":{"login":"dtolnay","id":100}}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub repo: String,
    pub owner: Owner,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Owner {
    pub login: String,
    pub id: i64,
}

İç içe nesneler, alan üzerinden referans verilen ayrı, adlandırılmış struct'lara dönüşür (Owner) — aynı biçimler tekilleştirilir.

Nesne dizisi (isteğe bağlı alan)

{"users":[{"id":1,"nick":"x"},{"id":2}]}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub users: Vec<User>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub nick: Option<String>,
}

Nesne dizileri tek bir öğe struct'ında birleşir. Bazı öğelerde eksik olan anahtarlar Option<String> olur — #[serde(default)] gerekmez.

camelCase anahtarlar

{"login":"octocat","publicRepos":15,"followerCount":9001,"createdAt":"2011-01-25"}
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
    pub login: String,
    #[serde(rename = "publicRepos")]
    pub public_repos: i64,
    #[serde(rename = "followerCount")]
    pub follower_count: i64,
    #[serde(rename = "createdAt")]
    pub created_at: String,
}

Alanlar #[serde(rename)] ile snake_case olur ve orijinal JSON anahtarına geri eşlenir. login gibi zaten snake_case olan anahtarlar rename almaz.

JSON nasıl Rust'a dönüştürülür

  1. 1

    JSON'unuzu yapıştırın

    Giriş alanına bir JSON nesnesi, dizisi veya API yanıtı bırakın. Dönüştürme anında başlar.

  2. 2

    Çıktıyı ayarlayın

    Kök struct'ı yeniden adlandırın ve crate'inizin stiline uyması için serde derive'lerini, Debug ve Clone'u veya pub görünürlüğünü açıp kapatın.

  3. 3

    Kopyalayın veya indirin

    Oluşturulan Rust'ı tek tıkla alın ve doğrudan projenize yapıştırın.

Common Use Cases

Türlenmiş API istemcileri
Bir REST veya GraphQL yanıtı örneğini, elle deserializasyon tekrar kodu yazmadan bir reqwest ya da benzeri istemci için serde struct'larına dönüştürün.
Yapılandırma ve fikstür ayrıştırma
serde_json ile deserialize etmeniz gereken JSON yapılandırma dosyaları, test fikstürleri veya webhook yükleri için struct'lar oluşturun.
Hızlı prototipleme
Bilmediğiniz bir yükü yapıştırıp biçimini anında Rust türleri olarak görün — yeni bir API'yi bağlamadan önce keşfetmenin hızlı bir yolu.

Dönüştürme nasıl çalışır

Yapısal çıkarım
Her nesne adlandırılmış bir struct olur; aynı biçimler tekilleştirilir, böylece kopyalar değil tek bir struct elde edersiniz. Nesne dizileri anahtar anahtar birleştirilir ve bazı öğelerde bulunmayan anahtarlar Option<T> olur.
Doğru sayı türleme
Tam sayılar i64'e eşlenir, i64::MAX'ın ötesinde u64'e yükselir ve u64'ün ötesinde f64'e geri düşer. Kayan sayılar tokenden algılanır (1.0, 2e3), böylece serde deserializasyonu bir kayan sayının tam sayı alanına uyumsuzluğunda asla başarısız olmaz.
İdiomatik, derlenebilir tanımlayıcılar
Anahtarlar #[serde(rename)] ile orijinal anahtara geri dönen snake_case alanları olur; Rust anahtar sözcükleri, yinelenen adlar ve tanımlayıcı olmayan anahtarlar temizlenir, böylece çıktı her zaman derlenir.
%100 istemci tarafı
Ayrıştırma ve oluşturma, ağ çağrısı olmadan tarayıcınızda çalışır; böylece verileriniz gizli kalır.

Temiz Rust struct'ları için ipuçları

Kök struct'ınızı adlandırın
Okunabilir kod için varsayılan Root yerine anlamlı bir kök adı belirleyin (örneğin User, ApiResponse).
serde_json'u yalnızca gerektiğinde ekleyin
serde_json::Value, boş veya karışık türde diziler ve yalnızca null içeren alanlar için ortaya çıkar. Yapabiliyorsanız bu alanlara daha zengin bir örnekten somut bir tür verin ya da Cargo.toml dosyanıza serde_json ekleyin.
Option'a karşı zorunlu alanları gözden geçirin
Alanlar yalnızca bir örnek onları atladığında Option<T> olarak işaretlenir. Aracın zorunlu ve isteğe bağlı alanları doğru çıkarabilmesi için temsili bir yük yapıştırın.

Sıkça Sorulan Sorular

JSON'u bir Rust struct'ına nasıl dönüştürürüm?
JSON'unuzu giriş alanına yapıştırın. Dönüştürücü onu tarayıcınızda anında ayrıştırır ve sağda serde derive'leriyle Rust struct'ları oluşturur. Sonucu almak için Kopyala'ya tıklayın — yükleme yok, hesap yok, bekleme yok.
serde derive'leri oluşturur mu? serde ve serde_json'a ihtiyacım var mı?
Evet — çıktı varsayılan olarak #[derive(Debug, Clone, Serialize, Deserialize)] kullanır. Cargo.toml dosyanıza serde'yi derive özelliğiyle ekleyin. serde_json bağımlılığına yalnızca çıktı serde_json::Value içeriyorsa ihtiyacınız olur; bu, boş veya karışık diziler ve yalnızca null içeren alanlar için ortaya çıkar. Düz struct'lar üretmek için serde anahtarını kapatın.
Oluşturulan struct'ı JSON ayrıştırmak için nasıl kullanırım?
serde_json'u Cargo.toml dosyanıza ekleyin, ardından tek satırda deserialize edin: let root: Root = serde_json::from_str(json)?;. Oluşturulan Deserialize derive gerisini halleder — bir bayt dilimi için serde_json::from_slice, bir dosya ya da HTTP gövdesi için from_reader ve geri serileştirmek için serde_json::to_string kullanın.
İsteğe bağlı ve null alanlar nasıl işlenir?
Bir anahtar bazı dizi öğelerinde bulunup diğerlerinde bulunmadığında bir Option alanı olur. Yalnızca ve her zaman null olan bir alan, isteğe bağlı bir serde_json::Value olur. serde, Option'ı otomatik olarak isteğe bağlı sayar; bu yüzden hiçbir #[serde(default)] özniteliği eklenmez veya gerekmez.
camelCase anahtarları ve Rust anahtar sözcüklerini nasıl işler?
Alan adları idiomatik snake_case'e dönüştürülür ve bir #[serde(rename)] özniteliği bunları tam JSON anahtarına geri eşler. type veya match gibi ayrılmış anahtar sözcükler, rename ile type_ veya match_ olarak yayılır; bu, ham tanımlayıcılardan daha sağlamdır çünkü self, crate ve super'ı da kapsar.
Alan başına rename yerine #[serde(rename_all)] kullanabilir mi?
Araç, her alan için bir #[serde(rename)] yayınlar çünkü bu her zaman çalışır — bir yük camelCase, snake_case ve düzensiz anahtarları karıştırsa bile. Bir struct'taki her alan tek bir kurala uyuyorsa, bu öznitelikleri silin ve bunun yerine struct'a tek bir #[serde(rename_all = "camelCase")] koyun; ikisi de aynı şekilde deserialize olur.
Hangi Rust sayı türünü kullanır?
Tam sayılar i64'e, değer i64::MAX'ı aştığında u64'e eşlenir ve u64'ün ötesinde f64'e geri düşer — böylece büyük kimlikler yine de kayıpsız gidip gelir. Ondalık nokta veya üs içeren herhangi bir sayı (1.0 veya 2e3 gibi) f64'e eşlenir, çünkü serde bir kayan sayıyı tam sayı alanına kabul etmezdi.
Tarihler ve zaman damgaları nasıl türlenir?
JSON'un tarih türü yoktur, bu yüzden 2011-01-25 gibi ISO dizeleri veya RFC 3339 zaman damgaları String olarak çıkar. Gerçek tarih işleme için alanı bir chrono türüne değiştirin — Utc saat diliminde DateTime veya NaiveDate — ve chrono'nun serde özelliğini etkinleştirin. serde o zaman RFC 3339'u otomatik ayrıştırır.
Dinamik veya bilinmeyen anahtarlara sahip nesneleri nasıl işlerim?
Anahtarlar değiştiğinde — örneğin kimliklerin değerlere eşlendiği bir harita — oluşturulan struct'ı String anahtarlı bir HashMap ile değiştirin. Türlenmiş bir struct'ı korurken yine de fazladan alanları yakalamak için, HashMap olan bir #[serde(flatten)] alanı ekleyin. Tamamen dinamik değerler için her şeyi karşılayan tür serde_json::Value'dur.
JSON verilerim gizli ve güvende mi?
Evet. Dönüştürme %100 tarayıcınızda JavaScript kullanılarak gerçekleşir. JSON'unuz — token, kimlik veya müşteri verileri dahil — sayfadan asla ayrılmaz ve hiçbir sunucuya gönderilmez.
serde olmadan düz Rust struct'ları oluşturabilir miyim?
Evet. use serde satırını, Serialize ve Deserialize derive'lerini ve tüm #[serde(rename)] özniteliklerini kaldırmak için serde anahtarını kapatın — temiz struct'lar kalır. Ayrıca Debug ve Clone derive'lerini ve pub görünürlüğünü de açıp kapatabilirsiniz.
Araç ücretsiz mi? Hesap gerekiyor mu?
Tamamen ücretsizdir; kayıt yok, sınır yok ve çalışma alanını karmaşıklaştıran reklam yok.