[英]Why does this JSON parse fail in the specified location in Rust?
以下 Rust 程序使用cargo run
on 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>
它会失败并出现以下错误:
抱歉,无法解析 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
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.