【发布时间】:2020-08-19 17:29:53
【问题描述】:
我正在构建一个使用 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(使用
'而不是"使用[]作为数组)。将来,请在您的问题中包含一个 minimal reproducible example 来证明问题,最好是一个 Rust playground 链接。 -
您可以使用许多在线工具来验证您的 JSON 字符串。 jsonlint.com 是我在快速搜索中找到的第一个。您还可以在浏览器 JSON 控制台中使用
JSON.parse()。 -
请不要在收到答复后更改您的问题。鼓励您改为打开一个新问题(在询问之前查找任何重复问题)。
-
抱歉,我认为这是我在阅读有关关闭状态的信息后应该做的。感谢您的帮助。