簡體   English   中英

為什么在嘗試將 JSON 文件反序列化為 hashmap 時出現錯誤(“尾隨字符”)?

[英]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>>會起作用,但我不知道這是否是您的意圖。

除此之外:

  • 請在可能的情況下使用 play.rust-lang.org 提供最小的完整可運行再現案例(在此處),並使用常規代碼塊在評論中顯示案例,這些 html 片段顯然不適用於 rust(特別是當代碼甚至不完整時)所以它們只是占用空間並破壞語法着色
  • 有什么小代碼......奇怪。 通常不會檢查is_ok / is_err然后立即展開,而是使用matchif let同時干凈地執行這兩項操作,並避免不同步、誤解等的風險......有些情況下unwrap
  • 調用您正在積極使用的變量_json是異常的, _前綴用於您想要捕獲但不想使用的變量(它會抑制未使用的unused_variables lint 而不會立即刪除該值,這將是一個單獨的效果_ )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM