我有一个包含多个键和值的源JSON,我想要获取几个目标JSON并检查它们是否是该JSON的子集:目标JSON中的所有字段都存在于源JSON中并保持相同值。
为实现这一目标,我想在HashMap
的值部分放置多个不同类型的值,并在这些值上调用equals
。
地图中有几种类型的值,我想接受一些键值对并检查是否
这是我想用Java做的一个例子:
boolean isInMap(Map<String, Object> map, String key, Object value) {
return map.containsKey(key) && map.get(key).equals(value);
}
这可能是XY question,但我怎么能在Rust中执行此操作?
答案 0 :(得分:0)
在Serde JSON库中它几乎是what @mcarton referred to,只有我使用了枚举匹配,我不确定它是否更好。
enum Value {
Str(String),
Int(i32),
// other value types
}
impl PartialEq for Value {
fn eq(&self, other: &Value) -> bool {
match *self {
Value::Str(ref s1) => match *other {
Value::Str(ref s2) => s1 == s2,
_ => false
},
Value::Int(i1) => match *other {
Value::Int(i2) => i1 == i2,
_ => false
},
// other implementations
}
}
}
由于我需要支持比Serde中提供的更少的类型,而我正在尝试Rust,我创建了自己的枚举,而不是使用serde_json::Value