#deserialize #error #hash-map #json #skip #structure #mixed

skippable_map

HashMap 的解序列化包装器,可跳过不符合数据结构的字段

2 个版本

0.1.1 2023年12月1日
0.1.0 2023年12月1日

2202数据结构

MIT 许可证

9KB
75

skippable_map

Crates.io Documentation Build status License

此crate提供了一个围绕 HashMap 的包装器,并实现了自定义的 Deserialize,它跳过任何不符合 HashMap 结构的字段,而不是抛出错误。

这种对数据解序列化的宽松方法,在尝试提取传递信息的一部分时非常有用。例如,一个具有混合结构的JSON blob无法控制,但对特定的条目集感兴趣。

示例

use serde_json;
use skippable_map::SkippableMap;
use std::collections::HashMap;
                                                                                                
let json = r#"{ "string": "b", "number": 1, "other_number": 2, "negative_number": -44}"#;
// SkippableMap<String, u64> will skip the (String, String) entry, and the negative number
let just_numbers: SkippableMap<String, u64> = serde_json::from_str(json).unwrap();
let hm = HashMap::from([
    (String::from("number"), 1_u64),
    (String::from("other_number"), 2_u64),
]);
                                                                                                
assert_eq!(just_numbers.as_ref(), &hm);
assert_eq!(just_numbers.0, hm);
// Consumes just_numbers to produce inner HashMap
assert_eq!(just_numbers.inner(), hm);

依赖关系

~0.4–1MB
~24K SLoC