我似乎無法理解為什么會發生此錯誤。
我是否按照檔案錯誤?
這是我遇到的錯誤,它發生在結構中除地圖之外的所有欄位中:
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("missing field `link`", line: 10, column: 1)', src\main.rs:22:47
這是我的 main.rs
use serde_json::{self, Value};
use std::{fs, collections::HashMap};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct Init {
link: String,
page: String,
pageid: u16,
update_timestamp: u16,
#[serde(flatten)]
char_page_info: HashMap<String, Value>
}
fn main() {
let data = fs::read_to_string("init.json").expect("Unable to read file");
println!("{}", data);
let p: Init = serde_json::from_str(&data).unwrap();
println!("{:#?}", p.char_page_info);
}
這是 init.json
{
"char_page_info": [
{
"link": "",
"page": "GGST/Jack-O/Frame_Data",
"pageid": 27121,
"update_timestamp": 0
}
]
}
如果我洗掉 link: String, page: String, pageid: u16, update_timestamp: u16,
它不會拋出任何錯誤并且反序列化沒有任何問題。
有人可以向我解釋為什么會這樣嗎?
uj5u.com熱心網友回復:
不僅僅是link缺少這一點:Serde 在第一個錯誤時就放棄了。link、page、 和pageid、 和update_timestamp都不見了。Serde 在頂級物件上查找這些欄位,但沒有找到它們,因為存在的唯一鍵是char_page_info. 由于char_page_info(它是一個陣列)可以有多個值,因此您struct不能正確地對基礎資料進行建模。通過對資料進行全面建模,我們可以得到預期的結果:
#[derive(Serialize, Deserialize, Debug)]
struct Init {
link: String,
page: String,
pageid: u16,
update_timestamp: u16,
}
#[derive(Serialize, Deserialize, Debug)]
struct Data {
char_page_info: Vec<Init>,
}
let data = r#"{
"char_page_info": [
{
"link": "",
"page": "GGST/Jack-O/Frame_Data",
"pageid": 27121,
"update_timestamp": 0
}
]
}"#;
println!("{}", data);
let p: Data = serde_json::from_str(&data).unwrap();
println!("{:#?}", p.char_page_info);
(操場)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/386272.html
上一篇:如何遍歷陣列中的陣列?
