Для разработчиков / Типы

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

Преобразуйте пример JSON в структуры Rust с Serialize и Deserialize для serde, полями в snake_case, переименованиями, Option для отсутствующих или null-ключей и Vec для массивов.

Конвертер JSON в структуры Rust: Каждый объект преобразуется в структуру с публичными полями. Ключи становятся полями в snake_case, а если написание в JSON отличается, добавляется #[serde(rename = "…")]. Ключевые слова Rust, например type, преобразуются в необработанные идентификаторы (r#type), которые serde автоматически сопоставляет с исходными именами. Ключи, отсутствующие в некоторых записях или имеющие значение null, получают тип Option<T>, а значения без однозначного типа — serde_json::Value. Вывод для нескольких примеров проверен компиляцией, а пример десериализован с помощью serde 1. Работает на 100% локально в вашем браузере, файлы на сервер не загружаются.

Запуски
В вашем браузере
Стоимость
Бесплатно · без регистрации
Доступность
Готово к использованию
JSON в RustЛокальная обработка

Полностью работает в браузере

Rust

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Address {
    pub city: String,
    pub zip_code: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    pub id: i64,
    pub user_name: String,
    pub avatar_url: String,
    pub score: f64,
    pub tags: Vec<String>,
    pub address: Address,
    pub manager_id: Option<i64>,
    #[serde(default)]
    pub nickname: Option<String>,
}

pub type UserList = Vec<User>;

Требуются крейты serde (с функцией derive) и serde_json. Имена полей преобразуются в snake_case, а если имя отличается от ключа, используется #[serde(rename)]; ключи, отсутствующие в некоторых объектах или имеющие значение null, преобразуются в Option. Числа имеют тип i64, если только в примере нет дробной части.

Чтение и запись данных

Десериализуйте данные с помощью serde_json::from_str::<Root>(&text)? и сериализуйте с помощью serde_json::to_string(&value)?. Неизвестные ключи во входных данных по умолчанию игнорируются; добавьте #[serde(deny_unknown_fields)] в структуру, чтобы отклонять их.

Тот же пример на Go смотрите в инструменте JSON в Go; чтобы сначала привести пример в аккуратный вид, используйте форматтер JSON.

Вариант и отсутствующие ключи

Отсутствующий ключ и значение null при десериализации поля Option превращаются в None. Если нужно различать эти случаи, используйте Option<Option<T>> с crate serde_with либо оставьте для этого поля serde_json::Value.

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

  1. Вставьте пример JSON, желательно массив с несколькими типичными записями.
  2. Укажите имя типа верхнего уровня и выберите, нужно ли исключать поля со значением None при сериализации.
  3. Скопируйте структуры в свой крейт, которому понадобятся serde и serde_json.

Конфиденциальность и ограничения

JSON преобразуется в вашем браузере и никогда не загружается на сервер.

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

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

Какие крейты нужны?

serde с функцией derive и serde_json: serde = { version = "1", features = ["derive"] } и serde_json = "1" в Cargo.toml.

Почему используются i64 и f64?

Они безопасно поддерживают любое число JSON. Если диапазон известен, замените их на u32, u8 или f32.

Можно ли вместо этого использовать #[serde(rename_all)]?

Да. Если все ключи используют одно соглашение, например camelCase, одна #[serde(rename_all = "camelCase")] у структуры заменяет отдельные переименования.

Бесплатный инструмент · запусков: в вашем браузере · аккаунт не нужен