Не удается получить структуру из JSON в Rust

#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», функции = [«вывод»] }». Если вы хотите отредактировать свой ответ, я могу его принять. Кстати, спасибо тебе