DT Dev Tools

Конвертер 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)]. Всё выполняется локально в вашем браузере, так что приватные данные никогда не загружаются.

Как использовать

  1. Вставьте JSONВставьте документ JSON или нажмите Load sample.
  2. Настройте deriveЗадайте имя корневой структуры, видимость полей и то, какие трейты выводить.
  3. Скопируйте структурыСкопируйте код Rust или скачайте файл .rs и добавьте serde в Cargo.toml.

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

Работает ли вывод с serde?
Да. Структуры выводят Serialize и Deserialize, а поля имеют #[serde(rename = "...")] там, где имя в Rust отличается от ключа JSON.
Как представлены необязательные поля?
Поля, отсутствующие или равные null в некоторых образцах, становятся Option<T>. Отметьте Skip serializing None, чтобы пропускать их при сериализации.
Можно ли изменить видимость полей?
Да. Выберите поля pub, pub(crate) или приватные и включайте либо отключайте derive Debug и Clone.
Загружается ли мой JSON?
Нет. Код генерируется локально в вашем браузере.
Реклама