Конвертер JSON у Rust struct (serde) — генератор структур
Перетворіть JSON на структури Rust онлайн із derive serde Serialize/Deserialize, Option<T> для необов'язкових полів і назвами snake_case. Безкоштовно, у браузері.
🔒 Працює повністю у вашому браузері — нічого не завантажуєтьсяСтруктури Rust для serde, згенеровані з JSON
Serde робить роботу з JSON у Rust швидкою й безпечною, але лише тоді, коли ви написали структури, що точно відповідають даним. Цей конвертер JSON у Rust пише їх за вас. Вставте зразок — і кожен об'єкт стане структурою з derive Serialize і Deserialize, ключі стануть ідіоматичними назвами полів у snake_case з атрибутами #[serde(rename)] там, де потрібно, вкладені об'єкти стануть окремими структурами, масиви — Vec<T>, а значення, відсутні чи рівні null десь у зразку, буде обгорнуто в Option<T>. Цілі та дробові числа розрізняються як i64 і f64.
Генератор побудований на quicktype, який об'єднує всі елементи кожного масиву, перш ніж обрати тип. У Rust це важливіше, ніж у більшості мов: один несподіваний ключ або null — і десеріалізація зазнає невдачі, тож урахування необов'язкових полів заздалегідь заощаджує час на налагодженні.
Видимість і derive
Оберіть видимість полів відповідно до того, як використовуватимуться типи: pub для спільного крейта моделей, pub(crate) для внутрішніх модулів або приватні поля, коли ви хочете додати власні конструктори. Derive Debug і Clone увімкнено за замовчуванням, бо вони потрібні майже кожній моделі; вимкніть їх для компактнішого виводу. Увімкніть Skip serializing None, щоб додати skip_serializing_if, і поля None зникали з вихідного JSON, а не записувалися як null. Не забудьте додати serde із функцією derive та serde_json до вашого Cargo.toml.
Як отримати точні типи
Використовуйте зразок із кількома елементами масиву та заповненими необов'язковими полями. Порожні масиви та null не дають інформації про тип і повертаються до serde_json::Value, який зазвичай варто замінити. Після генерації запустіть rustfmt, перегляньте ширину цілих чисел (ID може вміститися в u32) і перетворіть рядкові поля з фіксованим набором значень на enum із #[serde(rename_all)]. Усе виконується локально у вашому браузері, тож приватні дані ніколи не завантажуються.
Як користуватися
- Вставте JSONВставте документ JSON або натисніть Load sample.
- Налаштуйте deriveЗадайте назву кореневої структури, видимість полів і те, які трейти виводити.
- Скопіюйте структуриСкопіюйте код Rust або завантажте файл .rs і додайте serde до Cargo.toml.
Часті запитання
Чи працює вивід із serde?
Serialize і Deserialize, а поля мають #[serde(rename = "...")] там, де назва в Rust відрізняється від ключа JSON.Як подаються необов'язкові поля?
Option<T>. Позначте Skip serializing None, щоб пропускати їх під час серіалізації.Чи можна змінити видимість полів?
pub, pub(crate) або приватні та вмикайте чи вимикайте derive Debug і Clone.