Перейти до вмісту

JSON у структуру Rust

Перетворіть JSON-документ у структури Rust, готові до використання з serde.

Введення
Вихід

JSON у структуру Rust

Вставте JSON-об'єкт або масив, і цей інструмент згенерує відповідні структури Rust, готові до використання в проекті, який застосовує serde для серіалізації. Це економить час на ручне написання типів полів та атрибутів derive кожного разу, коли змінюється структура відповіді API або файлу конфігурації.

Опції контролюють вигляд згенерованого коду. Виберіть, які трейти породжувати — Debug, Clone, Serialize, Deserialize, PartialEq — та додавати чи #[serde(rename_all = "camelCase")] для того, щоб ідіоматичні snake_case-поля Rust правильно десеріалізували camelCase-ключі JSON. Null-значення можуть автоматично перетворитися на Option<T>, а для цілих чисел ви можете вибрати i32, i64 або u64, а для тексту — String або запозичений &str (з часом життя). Вкладені об'єкти можуть генеруватися як окремі структури верхнього рівня або бути обгорнені у свій pub mod, а поля можуть бути відкритими або приватними.

Масиви об'єктів об'єднуються в одну структуру: поле, присутнє тільки на деяких елементах, автоматично стає Option<T>, тому структура, згенерована з кількох прикладів записів, все ж таки відповідає повному набору даних. Імена полів перетворюються в snake_case, ключові слова Rust перетворюються на raw identifiers, такі як r#type, а ім'я, яке неможливо чисто представити, зберігає вихідний ключ через атрибут #[serde(rename = "...")] замість цього.

Все виконується локально у вашому браузері — ваш JSON ніколи не завантажується ніде, тому безпечно вставляти реальні API-запити або дані конфігурації. Скопіюйте згенерований код, завантажте його як файл .txt або відправте вивід назад у вхідні дані для подальшого вдосконалення.

FAQ

Чи встановлює він serde або додає його до Cargo.toml?
Ні. Він лише генерує код структури. Додайте serde з функцією derive до свого Cargo.toml окремо: serde = { version = "1", features = ["derive"] }.
Що відбувається з полем, яке має значення null у деяких записах і присутнє в інших?
Коли увімкнена опція «Обгорнути null-значення в Option<T>», це поле стає Option<T>, тому воно правильно десеріалізується незалежно від того, присутнє воно, має значення null чи відсутнє.
Чому поле отримує атрибут #[serde(rename = "...")]?
Це відбувається, коли перейменування в camelCase вимкнено і ключ JSON не відповідає згенерованому snake_case-імені поля Rust, тому вихідний ключ зберігається для десеріалізації.
Чи може він генерувати структури з масиву на верхньому рівні?
Так. Масив об'єктів створює псевдонім типу pub type Root = Vec<Item>; плюс структура Item, об'єднуючи поля зі всіх елементів масиву.
Чи завантажується мій JSON кудись?
Ні. Генерація структур виконується повністю у вашому браузері — ваш JSON ніколи не залишає вашого пристрою.