Skip to content

Konverter JSON ke Struct Rust

Tempel JSON, dapatkan struct serde Rust idiomatik seketika, 100% di browser Anda. Tipe i64/u64/f64 yang benar, Option untuk null, #[serde(rename)] untuk camelCase. Gratis.

Tanpa Pelacakan Berjalan di Browser Gratis
Opsi
0 karakter
Output Rust
0 baris
Output diverifikasi terhadap semantik serde dan pemformatan rustfmt untuk payload API dunia nyata. — Go Tools Team · Jul 2, 2026

Apa itu konversi JSON ke Rust?

Konversi JSON ke Rust mengubah sampel JSON menjadi struct Rust siap-kompilasi dengan makro #[derive(Serialize, Deserialize)] dari serde, sehingga Anda tak pernah menulis tangan boilerplate deserialisasi untuk respons API atau file konfigurasi. Generator struct Rust yang cepat ini menyimpulkan tipe angka yang benar, menandai field yang absen sebagai Option, dan menambahkan #[serde(rename)] untuk kunci non-snake_case — semuanya 100% di browser Anda.

Contoh

Respons API

{"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>,
}

Payload REST yang khas menjadi struct siap-serde yang dapat langsung Anda pakai di klien Anda. Angka disimpulkan i64, array menjadi Vec<String>.

Objek bertingkat

{"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,
}

Objek bertingkat menjadi struct terpisah dengan nama (Owner) yang direferensikan per field — bentuk yang identik dideduplikasi.

Array objek (field opsional)

{"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>,
}

Array objek digabung menjadi satu struct elemen. Kunci yang hilang dari sebagian item menjadi Option<String> — tanpa perlu #[serde(default)].

Kunci camelCase

{"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,
}

Field menjadi snake_case dengan #[serde(rename)] yang memetakan kembali ke kunci JSON asli. Kunci yang sudah snake seperti login tidak diberi rename.

Cara mengonversi JSON ke Rust

  1. 1

    Tempel JSON Anda

    Masukkan objek JSON, array, atau respons API ke kolom input. Konversi dimulai seketika.

  2. 2

    Setel output

    Ganti nama struct root dan aktifkan derive serde, Debug dan Clone, atau visibilitas pub agar sesuai gaya crate Anda.

  3. 3

    Salin atau unduh

    Ambil Rust yang dihasilkan dengan satu klik dan tempel langsung ke proyek Anda.

Common Use Cases

Klien API bertipe
Ubah sampel respons REST atau GraphQL menjadi struct serde untuk klien reqwest atau serupa tanpa menulis boilerplate deserialisasi dengan tangan.
Parsing konfigurasi dan fixture
Hasilkan struct untuk file konfigurasi JSON, fixture uji, atau payload webhook yang perlu Anda deserialisasi dengan serde_json.
Prototipe cepat
Tempel payload yang tak dikenal untuk langsung melihat bentuknya sebagai tipe Rust — cara cepat menjelajahi API baru sebelum menghubungkannya.

Cara kerja konversi

Inferensi struktural
Setiap objek menjadi struct bernama; bentuk yang identik dideduplikasi sehingga Anda mendapat satu struct, bukan salinan. Array objek digabung kunci demi kunci, dan kunci yang absen dari sebagian item menjadi Option<T>.
Penentuan tipe angka yang benar
Bilangan bulat dipetakan ke i64, naik ke u64 setelah i64::MAX, dan turun ke f64 di luar u64. Float dideteksi dari token (1.0, 2e3) sehingga deserialisasi serde tak pernah gagal karena ketidakcocokan float-ke-integer.
Identifier idiomatik yang dapat dikompilasi
Kunci menjadi field snake_case dengan #[serde(rename)] kembali ke kunci asli; kata kunci Rust, nama duplikat, dan kunci non-identifier disterilkan agar output selalu terkompilasi.
100% sisi klien
Parsing dan pembuatan berjalan di browser Anda tanpa panggilan jaringan, sehingga data Anda tetap privat.

Tips untuk struct Rust yang rapi

Beri nama struct root Anda
Tetapkan nama root yang bermakna (mis. User, ApiResponse) alih-alih Root bawaan agar kode mudah dibaca.
Tambahkan serde_json hanya saat perlu
serde_json::Value muncul untuk array kosong atau bertipe campuran dan field yang hanya null. Beri field tersebut tipe konkret dari sampel yang lebih kaya jika bisa, atau tambahkan serde_json ke Cargo.toml.
Tinjau Option vs wajib
Field ditandai Option<T> hanya ketika sebuah sampel menghilangkannya. Tempel payload yang representatif agar alat menyimpulkan field wajib dan opsional secara akurat.

Pertanyaan yang sering diajukan

Bagaimana cara mengonversi JSON menjadi struct Rust?
Tempel JSON Anda ke kolom input. Konverter mem-parsingnya seketika di browser Anda dan menghasilkan struct Rust dengan derive serde di sebelah kanan. Klik Salin untuk mengambil hasilnya — tanpa unggah, tanpa akun, tanpa menunggu.
Apakah alat ini menghasilkan derive serde? Apakah saya perlu serde dan serde_json?
Ya — output memakai #[derive(Debug, Clone, Serialize, Deserialize)] secara default. Tambahkan serde dengan fitur derive ke Cargo.toml Anda. Anda hanya perlu serde_json sebagai dependensi jika output mengandung serde_json::Value, yang muncul untuk array kosong atau campuran dan field yang hanya null. Matikan tombol serde untuk menghasilkan struct biasa.
Bagaimana cara memakai struct yang dihasilkan untuk mem-parsing JSON?
Tambahkan serde_json ke Cargo.toml Anda, lalu deserialisasi dalam satu baris: let root: Root = serde_json::from_str(json)?;. Derive Deserialize yang dihasilkan menangani sisanya — gunakan serde_json::from_slice untuk byte slice atau from_reader untuk file atau body HTTP, dan serde_json::to_string untuk menserialkan kembali.
Bagaimana field opsional dan null ditangani?
Ketika sebuah kunci muncul di sebagian item array tetapi tidak di item lain, ia menjadi field Option. Field yang selalu hanya null menjadi serde_json::Value opsional. serde memperlakukan Option sebagai opsional secara otomatis, sehingga tidak ada atribut #[serde(default)] yang ditambahkan atau diperlukan.
Bagaimana alat ini menangani kunci camelCase dan kata kunci Rust?
Nama field dikonversi menjadi snake_case idiomatik, dan atribut #[serde(rename)] memetakannya kembali ke kunci JSON persis. Kata kunci cadangan seperti type atau match dikeluarkan sebagai type_ atau match_ dengan rename, yang lebih tangguh daripada identifier mentah karena juga mencakup self, crate, dan super.
Bisakah alat ini memakai #[serde(rename_all)] alih-alih rename per-field?
Alat ini mengeluarkan #[serde(rename)] per-field karena selalu berhasil — bahkan saat satu payload mencampur camelCase, snake_case, dan kunci tak beraturan. Jika setiap field dalam sebuah struct memakai satu konvensi, hapus atribut-atribut itu dan taruh satu #[serde(rename_all = "camelCase")] pada struct; keduanya dideserialisasi secara identik.
Tipe angka Rust apa yang dipakai?
Bilangan bulat dipetakan ke i64, atau u64 saat nilainya melebihi i64::MAX, dan turun ke f64 di luar u64 — sehingga ID besar tetap round-trip. Angka apa pun yang ditulis dengan titik desimal atau eksponen (seperti 1.0 atau 2e3) dipetakan ke f64, karena serde akan menolak float ke dalam field integer.
Bagaimana tanggal dan timestamp diberi tipe?
JSON tidak punya tipe tanggal, jadi string ISO seperti 2011-01-25 atau timestamp RFC 3339 keluar sebagai String. Untuk penanganan tanggal sungguhan, ubah field ke tipe chrono — DateTime di zona waktu Utc, atau NaiveDate — dan aktifkan fitur serde milik chrono. serde lalu mem-parsing RFC 3339 secara otomatis.
Bagaimana menangani objek dengan kunci dinamis atau tak dikenal?
Ketika kunci bervariasi — misalnya map dari ID ke nilai — ganti struct yang dihasilkan dengan HashMap berkunci String. Untuk mempertahankan struct bertipe tetapi tetap menangkap field ekstra, tambahkan field #[serde(flatten)] berupa HashMap. Untuk nilai yang sepenuhnya dinamis, serde_json::Value adalah tipe serba-guna.
Apakah data JSON saya privat dan aman?
Ya. Konversi berjalan 100% di browser Anda dengan JavaScript. JSON Anda — termasuk token, ID, atau data pelanggan — tidak pernah meninggalkan halaman dan tidak pernah dikirim ke server.
Bisakah saya menghasilkan struct Rust biasa tanpa serde?
Ya. Matikan tombol serde untuk menghapus baris use serde, derive Serialize dan Deserialize, serta semua atribut #[serde(rename)] — meninggalkan struct yang bersih. Anda juga bisa mengaktifkan derive Debug dan Clone serta visibilitas pub.
Apakah alat ini gratis? Apakah saya perlu akun?
Sepenuhnya gratis tanpa pendaftaran, tanpa batas, dan tanpa iklan yang memenuhi ruang kerja.