我想创建一个包含多种类型的JSON对象,结构如下:
{
"key1": "value",
"key2": ["val", "val", "val"]
"key3": { "keyX": 12 }
}
我如何创建一个接受所有这些类型的HashMap
?
我在尝试这个:
let item = HashMap::new();
item.insert("key1", someString); //type is &str
item.insert("key2", someVecOfStrings); //type is Vec<String>
item.insert("key3", someOtherHashMap); //Type is HashMap<&str, u32>
let response = json::encode(&item).unwrap();
我知道散列Map没有足够的类型信息,但我不确定如何才能使它工作。我曾尝试在item
上设置一个显式类型,它是HashMap<&str, Encodable>
,但它只是另一个错误。正确的方法是什么?
2条答案
按热度按时间sxissh061#
您应该使用枚举类型作为
HashMap
中的值。该枚举需要为每种可能的类型(布尔、数字、字符串、列表、Map...)提供一个变量,并为每个变量提供一个相应类型的关联值:幸运的是,已经有了an implementation of a JSON value type,serde_json机箱的一部分,它是在serde机箱上构建的。
下面是使用serde_json crate时的代码:
s1ag04yj2#
下面是另一种可能更适合您的方法。
serde_json
crate提供了一种从JSON文本构造serde_json::Value
对象的方法。您的示例如下所示: