繁体   English   中英

为什么这个 JSON 解析在 Rust 中的指定位置失败?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM