Следующая программа Rust работает нормально, используя cargo run
для груза 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);
, который не имеет никакого отношения к шагу программы * 1014. * Другими словами, строка from_str()
не зависит от последующей попытки разбора на строку структуры JData, но ошибка указывает, чтоошибка линии from_str()
, не то чтобы она не могла разобраться в JData
.