Инструмент Tool Kumar

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

Генерируйте публичные структуры Rust с derive для Debug, Clone, Serialize и Deserialize. Ключи JSON становятся полями в snake_case с атрибутами serde rename, если имя в JSON отличается.

Как пользоваться инструментом

  1. Вставьте типичный ответ, включая записи с разным набором полей.
  2. Проверьте сгенерированный код и при необходимости измените имя корня.
  3. Скопируйте или скачайте код, затем сверьте типы с контрактом вашего 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.

Похожие инструменты

JSON в Go, JSON в Java и Генератор JSON Schema.