如何将复杂的JSON反序列化为Rust类型?

3

我正试图构建一个 Tauri 应用程序。当我试图将前端传递的 JSON 数据反序列化到我的 Rust 后端时,出现了一个错误,我不知道该如何修复。

JSON 遵循以下模式:

{
    positive: ICriterion[],
    negative: ICriterion[],
}

ICriterion {
    name: 'tribunal'|appealCourt'|'group'|'role'|'prevalent_domain'|'placed',
    label: string,
    value: number[]|string|bool
}

我们尝试使用 Rust 枚举类型为 value 字段实现联合类型:

#[derive(Deserialize)]
pub struct SortDataInput {
    positive: Vec<Criterion>,
    negative: Vec<Criterion>,
}

#[derive(Deserialize)]
pub enum CriterionValue {
    IntegerArray(Vec<i32>),
    Name(String),
    Boolean(bool),
}

#[derive(Deserialize)]
pub struct Criterion {
    name: String,
    value: CriterionValue,
}

但是当我尝试执行我的方法时,出现了一个错误,指出“Civil”(这是可能的字符串值)是一个未知的变量。

我猜我们在设置Rust枚举方面有些问题,但由于我们是Rust的初学者,我们无法真正弄清楚如何修复它。

您会如何创建正确的类型,以便Serde可以轻松反序列化我们的JSON?


旁注:我会使用枚举类型来表示“name”。 - Chayim Friedman
1个回答

6

谢谢您的迅速回答!我之前看到过这行代码片段,但是没有理解其中的机制! - TPouliquen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接