如何解决使用Serde反序列化JSON字符串时,“密钥必须是字符串”
我正在构建一个使用Rust进行复杂计算的React应用。在这种情况下,我将从React应用程序将JSON格式的字符串传递给Rust:
{
{'clientid': 1,'category': 'Category #1','subcategory': 'Subcategory #1','cost': 1000.00},{'clientid': 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,"subcategory": "Subcategory #2","cost": 2000.00}
]
"#;
let deserialized: Vec<ClientBudget> = serde_json::from_str(data).unwrap();
println!("{:?}",deserialized);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。