Инструмент Tool Kumar
JSON в структуры Rust
Генерируйте публичные структуры Rust с derive для Debug, Clone, Serialize и Deserialize. Ключи JSON становятся полями в snake_case с атрибутами serde rename, если имя в JSON отличается.
Как пользоваться инструментом
- Вставьте типичный ответ, включая записи с разным набором полей.
- Проверьте сгенерированный код и при необходимости измените имя корня.
- Скопируйте или скачайте код, затем сверьте типы с контрактом вашего API.
Пример с разбором
Этот результат создан встроенным конвертером. По двум ценам товаров выводится тип поля с плавающей точкой. Значения null и строка в поле note дают тип, допускающий null.
Ввод
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Результат
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Root {
#[serde(rename = "user-id")]
pub user_id: i64,
pub profile: Profile,
pub items: Vec<Item>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Profile {
pub city: String,
pub created_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Item {
pub price: f64,
pub note: Option<String>,
}
Использование структур с serde_json
Включите фичу derive в зависимости serde и добавьте serde_json в Cargo.toml. Скопируйте структуры в модуль и десериализуйте ответ.
Вывод типов по примеру не задаёт правил валидации приложения. Прежде чем считать декодированную модель доверенными входными данными, проверьте диапазоны, обязательные поля и временные метки.
let model: Root = serde_json::from_str(&response_body)?;
let text = serde_json::to_string(&model)?;Параметры и особые случаи
- Массивы становятся Vec, а типизированные nullable-поля — Option. Для полей, отсутствующих в части записей, добавляется skip_serializing_if = "Option::is_none".
- Для неизвестных значений, полей только со значением null или значениями разных типов используется serde_json::Value. Атрибуты переименования сохраняют знаки препинания, а для зарезервированных слов Rust по возможности используются raw-идентификаторы.
- Целые числа получают тип i64, а за пределами 64-битного диапазона со знаком — i128. Дробные — f64. Прежде чем принимать очень большие целые, проверьте их поддержку в serde_json и диапазон чисел.
- Даты остаются String. Для точных денежных сумм нужны доменный тип и сериализатор; пример JSON не может задать эти правила.
Конфиденциальность по умолчанию
Документ остаётся в этом браузере. Tool Kumar разбирает и конвертирует данные, создаёт файлы для скачивания на вашем устройстве, без регистрации и отправки на сервер.
Вопросы об инструменте «JSON в структуры Rust»
- Включает ли генератор derive для serde?
- Да. Он импортирует serde::{Deserialize, Serialize} и добавляет к структурам derive для Debug, Clone, Serialize и Deserialize.
- Сохраняются ли имена из JSON?
- Да. Где нужно, генерируются атрибуты serde rename, а если это сокращает число сопоставлений для отдельных полей, может использоваться rename_all = "camelCase".
- Как представляются null и отсутствующие значения?
- Типизированные поля, которые могут содержать null или отсутствовать, используют Option<T>. Для неизвестных полей и полей только со значением null используется serde_json::Value, который сам может содержать null из JSON.
- Можно ли десериализовать результат через serde_json?
- Да. Добавьте в проект Rust serde с фичей derive и serde_json, затем десериализуйте данные в сгенерированный тип Root.