我试图使用serde_json crate将JSON反序列化为Rust中的 struct .一个JSON条目示例:
{
"name": "example",
"stuff": [
"item 1",
"item 2",
[
"nested item 1",
"nested item 2",
"nested item 3"
]
]
}
"Stuff"字段包含一个元素数组,该元素数组可以是字符串,也可以是字符串array.我正在try 将这种数据反序列化为Struct.
我try 使用下面的Enum和Struct组合来简化serde_json.from_str()
:
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
enum ListOrNestedList {
List(Vec<String>),
NestedList(Vec<Vec<String>>),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
struct Entry {
name: String,
stuff: ListOrNestedList,
}
try 将此重新设置会产生以下异常:
called `Result::unwrap()` on an `Err` value: Error("data did not match any variant of untagged enum ListOrNestedList", line: 123, column: 40)
基于文档,使用Enum是处理包含不同类型的JSON的一种可能方法.然而,在我的示例中,两种可能的类型都包含在"stuff"字段中.是否需要一种不同的方法来简化这些数据,或者我只是犯了一个错误?