Для разработчиков / Типы
Конвертер 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% локально в вашем браузере, файлы на сервер не загружаются.
- Категория
- Инструменты для разработчиков
- Запуски
- В вашем браузере
- Стоимость
- Бесплатно · без регистрации
- Доступность
- Готово к использованию
Полностью работает в браузере
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.
Как пользоваться
- Вставьте пример JSON, желательно массив с несколькими типичными записями.
- Укажите имя типа верхнего уровня и выберите, нужно ли исключать поля со значением None при сериализации.
- Скопируйте структуры в свой крейт, которому понадобятся 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")] у структуры заменяет отдельные переименования.
Бесплатный инструмент · запусков: в вашем браузере · аккаунт не нужен