#json #rust
Вопрос:
У меня возникли проблемы с получением структуры при чтении файла JSON. Вот как выглядит файл конфигурации:
конфигурация.json
{
"config_group_1":{
"variable_1": 10
}
}
Его struct
определяют как:
pub struct ConfigGroup1 {
variable_1: usize
}
pub struct MainConfig {
config_group_1: ConfigGroup1
}
Я читаю файл с функцией, которая возвращает String
config_content
.
let config: Result = serde_json::from_str(amp;config_content);
Но компилятор указывает на следующую ошибку:
missing generics for type alias `serde_json::Result`
expected 1 type argument
help: use angle brackets to add missing type argument: `<T>`rustc(E0107)
Как я могу это решить? Где определить, что MainConfig является ожидаемым типом?
Комментарии:
1.
let config: MainConfig = serde_json::from_str(amp;config_content);
?
Ответ №1:
Кажется, что многого не хватает. Я предлагаю вам ознакомиться со следующей документацией https://docs.serde.rs/serde_json/
Ниже приведена версия, которая может вам помочь
use serde::{Deserialize, Serialize};
use serde_json::Resu<
#[derive(Serialize, Deserialize)]
struct MainConfig {
config_group_1: ConfigGroup1
}
#[derive(Serialize, Deserialize)]
pub struct ConfigGroup1 {
variable_1: usize
}
fn main() -> Result<()> {
let data = r#"{"config_group_1": {"variable_1": 10 }}"#;
let p: MainConfig = serde_json::from_str(data).expect("JSON was not well-formatted");
println!("Value {} ", p.config_group_1.variable_1);
Ok(())
}
Комментарии:
1. Это не работает: граница признака
main_config::MainConfig: serde::Deserialize<'_>
не удовлетворена признакserde::Deserialize<'_>
не реализован дляmain_config::MainConfig
rustc(E0277)2. Зеппи, я смог решить эту проблему, но где у тебя «?» Мне пришлось заменить на «.expect(«JSON был неправильно отформатирован»)», и в TOML я просто добавил «serde = { версия = «1.0», функции = [«вывод»] }». Если вы хотите отредактировать свой ответ, я могу его принять. Кстати, спасибо тебе