解析 JSON 字符串有许多方法,但通常确实涉及 serde
和 serde_json
。
如果您只想要一个简单的 serde_json::Value
对象,则可以使用以下代码:
fn main() {
let json_str = r#"{"first":"one","second":"two"}"#;
let json_val: serde_json::Value = serde_json::from_str(json_str).unwrap();
println!("{:#?}", json_val);
}
Object {
"first": String("one"),
"second": String("two"),
}
如果你想要更复杂的东西,比如一个实际包含
first
和
second
成员的结构体,你可以将其解析为一个serde派生的结构体:
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct MyValue {
first: String,
second: String,
}
fn main() {
let json_str = r#"{"first":"one","second":"two"}"#;
let my_value: MyValue = serde_json::from_str(json_str).unwrap();
println!("{:#?}", my_value);
}
MyValue {
first: "one",
second: "two",
}
如果您不想使用结构体或者Value
,而是想要一个简单的HashMap<String, String>
,请按照以下步骤操作:
use std::collections::HashMap;
fn main() {
let json_str = r#"{"first":"one","second":"two"}"#;
let my_dict: HashMap<String, String> = serde_json::from_str(json_str).unwrap();
println!("{:#?}", my_dict);
}
{
"first": "one",
"second": "two",
}
serde_json::from_str
的可能性是无穷的。只需弄清楚您想要使用数据执行哪些任务,然后选择适当的数据类型即可;)
api::Value
是什么?你的尝试在哪里(实际代码,而不仅仅是“我尝试过这个”,因为你提供的所有链接都有解决方案)?你可以查看[mre]和[ask]以获取更多改进问题的提示。 - cafce25api::Value
不是你想要的,也许应该使用serde_json::Value
。也许你的use
语句不正确? - Finomnis