Конвертер JSON в структуры Rust

Генерируйте из примера JSON структуры Rust с derive Serialize и Deserialize из serde.

Генерация структур serde из JSON

В Rust JSON обычно читают, десериализуя его в структуры с помощью serde и serde_json. Конвертер пишет такие структуры по примеру: каждый объект становится структурой с #[derive(Serialize, Deserialize)], вложенные объекты получают собственные структуры, массивы становятся Vec<T>, целые числа — i64, дробные — f64, а строки — String. Имена полей сохраняются в snake_case, а если ключ JSON не является допустимым идентификатором в snake_case, добавляется атрибут #[serde(rename = "...")].

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

  1. Вставьте пример JSON — например, полезную нагрузку события или файл конфигурации.
  2. Введите имя корневой структуры, например Event.
  3. Добавьте в Cargo.toml serde (с фичей derive) и serde_json, вставьте структуры в модуль и разбирайте данные через serde_json::from_str::<Event>(&text).

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

Почему поля приватные?
Генератор оставляет поля без pub — для работы serde внутри модуля этого достаточно. Добавьте pub к полям, которые нужно читать из других модулей.
Как представлены необязательные поля?
Если поле равно null или отсутствует в части элементов примера, оно генерируется как Option<T>, и serde принимает оба варианта. Поля, которые присутствуют всегда, получают обычные типы, и их отсутствие приводит к ошибке десериализации.
Какие крейты нужны?
Добавьте serde с features = ["derive"] и serde_json. Комментарий в начале результата также показывает устаревший стиль с extern crate, который в современных редакциях Rust не нужен.

Пример: JSON в Rust

Исходный JSON

{
  "event_type": "page_view",
  "timestamp": 1735689600,
  "user_id": "u_123",
  "properties": { "path": "/pricing", "referrer": "google" }
}

Сгенерированный код: Rust (Event)

// Example code that deserializes and serializes the model.
// extern crate serde;
// #[macro_use]
// extern crate serde_derive;
// extern crate serde_json;
//
// use generated_module::Event;
//
// fn main() {
//     let json = r#"{"answer": 42}"#;
//     let model: Event = serde_json::from_str(&json).unwrap();
// }

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
pub struct Event {
    event_type: String,

    timestamp: i64,

    user_id: String,

    properties: Properties,
}

#[derive(Serialize, Deserialize)]
pub struct Properties {
    path: String,

    referrer: String,
}

Преобразовать JSON в другие языки