将 JSON 解析为 Rust 中的 Map
Parsing a JSON into a Map in rust
我是 Rust 的初学者,刚刚在解析 JSON 文件时遇到了问题。我尝试使用 serde_json 来完成任务。我知道如何将 ASCII 文件解析为字符串,以及如何将其内容解析为 Value
,但我需要一个 Map<String, Value>
来遍历 KVP。我没有走得太远,因为我偶然发现了一个引用错误。我试过的方法如下:
use std::fs;
use std::error::Error;
use serde_json::{Value, Map};
pub struct ConfigSerde;
impl ConfigSerde {
pub fn read_config(path: &str) -> Result<Map<String, Value>, Box<Error>> {
let config = fs::read_to_string(path)?;
let parsed: Value = serde_json::from_str(&config)?;
let obj: Map<String, Value> = parsed.as_object().unwrap();
Ok(obj)
}
}
一旦我尝试 运行 这段代码,编译器抛出以下错误:
error[E0308]: mismatched types
--> src/config/serde.rs:11:39
|
11 | let obj: Map<String, Value> = parsed.as_object().unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `serde_json::map::Map`, found reference
|
= note: expected type `serde_json::map::Map<std::string::String, serde_json::value::Value>`
found type `&serde_json::map::Map<std::string::String, serde_json::value::Value>`
如何在 Rust 中将 JSON 解析为 Map
?我愿意使用替代板条箱,尽管 serde_json 是首选,因为它似乎是所有板条箱中最坚固的。
由于 as_object
returns 引用并且您需要一个拥有的值,因此您需要克隆地图。幸运的是 Map
提供了一个 Clone
实现,所以你可以这样做:
let obj: Map<String, Value> = parsed.as_object().unwrap().clone();
我是 Rust 的初学者,刚刚在解析 JSON 文件时遇到了问题。我尝试使用 serde_json 来完成任务。我知道如何将 ASCII 文件解析为字符串,以及如何将其内容解析为 Value
,但我需要一个 Map<String, Value>
来遍历 KVP。我没有走得太远,因为我偶然发现了一个引用错误。我试过的方法如下:
use std::fs;
use std::error::Error;
use serde_json::{Value, Map};
pub struct ConfigSerde;
impl ConfigSerde {
pub fn read_config(path: &str) -> Result<Map<String, Value>, Box<Error>> {
let config = fs::read_to_string(path)?;
let parsed: Value = serde_json::from_str(&config)?;
let obj: Map<String, Value> = parsed.as_object().unwrap();
Ok(obj)
}
}
一旦我尝试 运行 这段代码,编译器抛出以下错误:
error[E0308]: mismatched types
--> src/config/serde.rs:11:39
|
11 | let obj: Map<String, Value> = parsed.as_object().unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected struct `serde_json::map::Map`, found reference
|
= note: expected type `serde_json::map::Map<std::string::String, serde_json::value::Value>`
found type `&serde_json::map::Map<std::string::String, serde_json::value::Value>`
如何在 Rust 中将 JSON 解析为 Map
?我愿意使用替代板条箱,尽管 serde_json 是首选,因为它似乎是所有板条箱中最坚固的。
由于 as_object
returns 引用并且您需要一个拥有的值,因此您需要克隆地图。幸运的是 Map
提供了一个 Clone
实现,所以你可以这样做:
let obj: Map<String, Value> = parsed.as_object().unwrap().clone();