UTILS.
100% в браузере
🦀

JSON в структуры Rust Serde

Сгенерируйте структуры Rust с derive serde из примера JSON, готовые к Serialize/Deserialize, с Option для nullable-полей и атрибутами rename.

результат

Об этом инструменте

Инструмент JSON в структуры Rust Serde преобразует вставленный пример JSON в структуры Rust, аннотированные для serde, так что вы можете десериализовать ту же нагрузку без ручного написания каждого поля. Он разбирает JSON, рекурсивно выводит типы Rust и выдаёт по одной структуре #[derive(Serialize, Deserialize, ...)] на объект: строки становятся String, целые числа — i64 (или u64, когда все примеры неотрицательны), другие числа — f64, логические значения — bool, массивы — Vec<T>, а вложенные объекты — собственными структурами в PascalCase, определёнными раньше их родителей.

Вся работа происходит локально в вашем браузере через JSON.parse и обычный JavaScript — ничего не загружается. Поля структур преобразуются в snake_case, и всякий раз, когда ключ JSON отличается от поля в snake_case, инструмент добавляет #[serde(rename = "originalKey")], чтобы структура всё ещё сопоставлялась с форматом передачи. Ключи, отсутствующие в части соседних примеров или увиденные как null, становятся Option<T> с #[serde(default)], чтобы десериализация допускала их отсутствие. Пустые массивы откатываются к Vec<serde_json::Value>.

Переключатель ширины целых переключается между 64-битными (i64/u64, по умолчанию) и 32-битными (i32/u32) целыми числами, автоматически повышая до 64-битных, когда пример значения превышает 32-битный диапазон. Переключатель derive выбирает между полным набором (Serialize, Deserialize, Debug, Clone) и минимальным Serialize, Deserialize. Файл начинается с use serde::{Serialize, Deserialize};. Скопируйте его или скачайте файл .rs.

Часто задаваемые вопросы

Как типы JSON сопоставляются с Rust?
string в String, целое число в i64 (или u64, когда каждый пример неотрицателен), нецелое число в f64, логическое значение в bool, массив в Vec<T>, а объект в именованную структуру с derive serde. Null или отсутствующие поля становятся Option<T> с #[serde(default)].
Когда добавляется #[serde(rename)]?
Всякий раз, когда ключ JSON не равен имени поля в snake_case — например, ключ userName даёт поле user_name с #[serde(rename = "userName")], так что структура по-прежнему десериализует исходный JSON в точности.
Могу ли я выбрать ширину целых?
Да. Переключатель ширины выдаёт 64-битные (i64/u64) или 32-битные (i32/u32) целые. Знаковость следует за данными: полностью неотрицательные примеры используют беззнаковый тип. Значения за пределами 32-битного диапазона автоматически повышаются до 64-битных.
Какие derive включены?
По умолчанию #[derive(Serialize, Deserialize, Debug, Clone)]; минимальный вариант выдаёт только Serialize, Deserialize. Дочерние структуры объявляются раньше родителей, которые на них ссылаются, так что модуль компилируется как есть.

Больше инструментов