我有一個包含帶有未知鍵的JSON對象的文件。我想將這個對象解碼成一個結構,但不知道如何聲明這個結構。發生使用rustc_serialize反序列化JSON對象:爲什麼需要實現PartialEq?
extern crate rustc_serialize;
use rustc_serialize::json;
use std::collections::BTreeMap;
#[derive(RustcDecodable, Debug)]
struct MyStruct {
foo: u8,
bar: Vec<String>,
}
let raw_json = r#"{
"A": {
"foo": 2,
"bar": ["a", "b"],
},
"C": {
"foo": 1,
"bar": ["c", "d"],
},
:
}"#;
let j: BTreeMap<String, MyStruct> = json::decode(&raw_json).unwrap();
println!("{:?}", j.get("A").unwrap());
以下錯誤:
error: the trait `core::cmp::PartialEq` is not implemented for the type `MyStruct` [E0277]
let j: BTreeMap<String, MyStruct> = json::decode(&raw_json).unwrap();
^~~~~~~~~~~~
我將不得不實施Decodable
爲MyStruct
自己呢?
您是否試圖按錯誤消息的建議實施PartialEq? – Shepmaster
不,tbh。我認爲這個錯誤是不正確的,因爲這個結構等式應該可能派生。我現在實施了'PartialEq',它工作。但是,我仍然不明白爲什麼我需要這樣做。網上的例子似乎都沒有做到這一點。 – Kreisquadratur
*對於這個結構相等應該可能派生* - 沒有特徵會自動派生,這就是爲什麼你必須添加'#[derive]'。 – Shepmaster