Превратите пример JSON в структуры Rust с derive serde, переименованиями, Option и Vec
Работает в вашем браузере. Ничего из того, что вы вводите, никуда не отправляется. Проверено 16 октября 2026 г..Вставьте пример JSON и получите структуры Rust с derive Serialize и Deserialize из serde. Целые числа становятся i64, а любая дробь делает поле f64; значение null или отсутствующее в некоторых объектах становится Option<T>, а ключи, записанные иначе, чем их поле в snake_case, получают rename из serde, 1 rename_all, когда все они в camelCase.
Эта страница переведена машинным способом с английского оригинала. Перевод ещё не проверен человеком, поэтому ориентируйтесь на английскую версию. Читать английский оригинал
Вставьте пример JSON, например ответ API, в левое поле.
Структуры Rust появляются по мере ввода, каждая с #[derive(Serialize, Deserialize)], полями в snake_case и нужными переименованиями serde.
Включите Option для каждого поля или PartialEq, если они нужны, и задайте имя корневой структуры.
Нажмите «Копировать» или «Скачать», чтобы сохранить models.rs, и добавьте serde (с feature derive) и serde_json в Cargo.toml.
Rust декодирует JSON с помощью serde, и каждому объекту нужна структура, поля которой имеют правильные типы, а имена соответствуют ключам JSON. Этот конвертер пишет такие структуры по примеру, так что длинный ответ API превращается в компилируемый Rust за одну вставку.
Как выбираются типы.
| Значение JSON | Тип Rust |
|---|---|
| "text" | String |
| true / false | bool |
| 42 (только целые числа) | i64 |
| 4.5 (встретилась любая дробь) | f64 |
| null и ещё какой-то тип | Option |
| только null или смешанные виды | serde_json::Value |
| [ ... ] | Vec<...> |
| { } пустой | Map<String, Value> |
| { ... } | отдельная структура |
Отсутствующие ключи. Все объекты массива сливаются в одну структуру. Ключ, который некоторые объекты пропускают, становится Option, потому что serde считает отсутствующий Option значением None, а любое другое отсутствующее поле — ошибкой. Такие поля также получают skip_serializing_if, так что при обратной записи структуры они снова опускаются.
Имена. Поля пишутся в snake_case. Если каждый ключ — просто camelCase-форма своего поля, структура получает один rename_all; иначе каждое отличающееся поле получает свой rename. Ключевые слова становятся сырыми идентификаторами вроде r#type; self, super и crate не могут быть сырыми, поэтому становятся self_ с rename.
Параметры. Option для каждого поля подходит API, которые могут опустить любой ключ. Derive PartialEq позволяет тестам сравнивать значения. Корневая структура называется Root, если вы не дадите ей имя.
Каждый результат проверен обратным чтением Rust по правилам serde и декодированием 9 примеров. Ничто из вставленного не покидает браузер.
Вставьте пример JSON в конвертер, и рядом появятся структуры Rust, каждая с derive Serialize и Deserialize. Добавьте serde с feature derive и serde_json в Cargo.toml, вставьте структуры в модуль и декодируйте через serde_json::from_str::<Root>(&text).
Поле становится Option, когда в примере оно равно null или когда некоторые объекты массива пропускают ключ. Serde декодирует отсутствующий ключ в Option как None, а любое другое отсутствующее поле — ошибка, поэтому именно Option позволяет структуре принять каждый объект примера.
Поля пишутся в snake_case, как требует стиль Rust. Если каждый ключ — camelCase-форма своего поля, структура получает один #[serde(rename_all = "camelCase")]; иначе каждое поле, записанное по-другому, получает свой #[serde(rename = "key")], так что ключи вроде first-name или 2fa тоже декодируются.
JSON не говорит, насколько большим может быть число, поэтому i64 — безопасный целый тип, а f64 соответствует двойной точности, с которой читаются числа JSON. Поле становится f64, как только любое значение в примере имеет дробную часть, потому что serde отказывается читать 4.5 в целое число.
Ключевые слова пишутся как сырые идентификаторы, например r#type, и serde убирает r# при сопоставлении с ключом, так что rename не нужен. Четыре ключевых слова, которые не могут быть сырыми, self, Self, super и crate, становятся self_ и подобными, с rename обратно на исходный ключ.
Нет. Преобразование выполняется в вашем браузере без запросов к серверу, и JSON не сохраняется, так что ответы API с токенами или личными данными остаются на вашем устройстве. Закройте вкладку, и ничего не останется.
Ставки и правила меняются; проверьте источник, прежде чем полагаться на цифру.
Всё ещё не получается? Задайте вопрос об инструменте «Конвертер JSON в структуры Rust» и ответить может любой, кто знает. Учётная запись не нужна.