gpt4 book ai didi

json - 为什么此 JSON 解析在 Rust 中的指定位置失败?

转载 作者:行者123 更新时间:2023-11-29 08:13:13 24 4
gpt4 key购买 nike

以下 Rust 程序使用 cargo run 工作正常在 cargo 1.39.0-nightly 上:

extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate serde_derive;
use serde_json::Value as JsonValue;

#[derive(Serialize,Deserialize)]
struct JData
{
names: Vec<String>
}
fn main() {
let json_str = r#"

{
"names": ["James", "Carl", "Megan"]
}

"#;

let res = serde_json::from_str(json_str); // res is Result

if res.is_ok()
{
let p: JData = res.unwrap();

println!("{}", p.names[1]);
}
else
{
eprintln!("Sorry, couldn't parse JSON :(");
}

}

但是,如果我更改行 names: Vec<String>names: Vec<u8>它失败并出现此错误:

Sorry, couldn't parse JSON :(

可以理解,这个程序应该会失败。但我不明白为什么它会到达这一行,因为此错误显示为 let res = serde_json::from_str(json_str); 的结果这与 let p: JData = res.unwrap(); 无关程序的步骤。换句话说,from_str()行不依赖于后续尝试解析为 JData 结构行,但错误表明 from_str()线路失败,不是它无法解析为 JData .

最佳答案

res 的类型由 let p: JData 决定在编译时,即使控制在运行时从未到达该行。那种类型,Result<JData, …> , 控制 serde_json::from_str 的行为,这导致它无法将字符串文字读入 u8

关于json - 为什么此 JSON 解析在 Rust 中的指定位置失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58195348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com