簡體   English   中英

使用 Serde 反序列化 JSON 字符串時,“key must be a string”

[英]“key must be a string” when deserializing a JSON string with Serde

我正在構建一個使用 Rust 進行復雜計算的 React 應用程序。 在這種情況下,我將一個 JSON 格式的字符串從 React 應用程序傳遞給 Rust:

{
  {'clientid': 1, 'category': 'Category #1', 'subcategory': 'Subcategory #1', 'cost': 1000.00},
  {'clientid': 1, 'category': 'Category #1', 'subcategory': 'Subcategory #2', 'cost': 2000.00}
}

我試圖弄清楚如何將 Rust 中的字符串反序列化為定義為的結構數組:

#[derive(Serialize, Deserialize, Debug)]
struct ClientBudget {
    clientid: u32,
    category: String,
    subcategory: String,
    cost: f32,
}

我試過了:

let deserialized: ClientBudget = serde_json::from_str(&some_json).unwrap();

但這會引起恐慌:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("key must be a string"

如何讓 Rust/serde 處理這個 JSON 字符串?

您的 JSON 格式錯誤。 如果你想要一個列表,你必須使用[]而不是{} 您還需要反序列化對象的Vec

use serde::{Deserialize, Serialize}; // 1.0.114

#[derive(Serialize, Deserialize, Debug)]
struct ClientBudget {
    clientid: u32,
    category: String,
    subcategory: String,
    cost: f32,
}

fn main() {
    let data = r#"
[
    {"clientid": 1, "category": "Category #1", "subcategory": "Subcategory #1", "cost": 1000.00},
    {"clientid": 1, "category": "Category #1", "subcategory": "Subcategory #2", "cost": 2000.00}
]
    "#;
    let deserialized: Vec<ClientBudget> = serde_json::from_str(data).unwrap();

    println!("{:?}", deserialized);
}

操場

暫無
暫無

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

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