[英]Getting NullReferenceException when trying to deserialize JSON
[英]Why Error(“trailing characters”) when trying to deserialize a JSON file to a hashmap?
所以基本上,我正在嘗試使用 serde crate 將 JSON 文件反序列化為 hashmap<String,String> ,但是。 JSON 文件:
"
[
{
"orchard_name": "Happy Apple",
"tons": "5"
},
{
"orchard_name": "Munch for Lunch",
"tons": "2"
}
]
"
這是我的結構:
#[derive(Serialize, Deserialize, Debug)]
struct OrangeFarm
{
map : HashMap<String,String>
}
這就是我嘗試進行反序列化的地方:
let res = serde_json::from_str(_json);
if res.is_ok() {println!("Deserealization worked."); }
else { println!("it went wrong"); }
let mut deserializedFarm : OrangeFarm = res.unwrap();
出於某種原因,如果我刪除第二個 {},它會起作用,但如果我讓第二個 {} 則不起作用,因為我收到此錯誤“線程 'main' 在Err
值上調用Result::unwrap()
時驚慌失措:錯誤(“尾隨字符”。你知道為什么會發生這種情況嗎?謝謝!
出於某種原因,如果我刪除第二個 {},它會起作用,但如果我讓第二個 {} 則不會
我不知道這意味着什么,但據我所知,它永遠不會起作用:您正在嘗試反序列化一組結構,但您正在反序列化為一個結構。 所以反序列化在邏輯上失敗了。 代碼總是恐慌,盡管在最初的情況下它也會打印“它出錯了”。
此外,您的結構定義與 JSON 不匹配,因此即使您嘗試反序列化為Vec<OrangeFarm>
調用也會失敗: serde
期望找到map
屬性,該屬性不存在於 Z0ECD1FD8C1D7ABBD1874A 中。 所以你需要修復你的結構,或者配置序列化/反序列化方案。
反序列Vec<HashMap<String, String>>
會起作用,但我不知道這是否是您的意圖。
除此之外:
is_ok
/ is_err
然后立即展開,而是使用match
或if let
同時干凈地執行這兩項操作,並避免不同步、誤解等的風險......有些情況下unwrap
。_json
是異常的, _
前綴用於您想要捕獲但不想使用的變量(它會抑制未使用的unused_variables
lint 而不會立即刪除該值,這將是一個單獨的效果_
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.