使用 rust 反序列化 JSON 多个可能的值
Deserializing JSON with multiple possible values with rust
所以我正在用 Rust 编写一个程序(我对它很陌生),它读取一个 json 配置文件并根据输入做一些事情。我已经成功地使用 serde_json 解析了 json。我想让用户做的下一件事是能够指定一些高级选项,但我不知道如何解析输入。
默认的 json 看起来像这样:
{
value: true
}
直接解析为这样的结构:
#[derive(Deserialize)]
pub struct Config {
value: bool
}
我将如何为用户添加能够输入 bool
或 object
的选项:
{
value: {
avanced_value: true
}
}
我试过像这样使用 enum
但似乎 bool
不能在枚举中使用。
#[derive(Deserialize)]
pub struct Config {
value: ValueEnum
}
#[derive(Deserialize)]
pub enum ValueEnum {
bool,
Config(ValueConfig),
}
#[derive(Deserialize)]
pub struct ValueConfig {
advanced_value: bool
}
我是否遗漏了一些明显的东西,或者我应该重组输入 json?
提前Tnx.
您没有将 bool 包装在枚举变体中(就像您对 ValueConfig 所做的那样)。同样默认情况下,serde 标记枚举,这可能不是您想要的。您想要使用未标记的枚举:
#[derive(Deserialize)]
pub struct Config {
value: ValueEnum
}
#[derive(Deserialize)]
#[serde(untagged)]
pub enum ValueEnum {
Bool(bool),
Config(ValueConfig),
}
#[derive(Deserialize)]
pub struct ValueConfig {
advanced_value: bool
}
所以我正在用 Rust 编写一个程序(我对它很陌生),它读取一个 json 配置文件并根据输入做一些事情。我已经成功地使用 serde_json 解析了 json。我想让用户做的下一件事是能够指定一些高级选项,但我不知道如何解析输入。 默认的 json 看起来像这样:
{
value: true
}
直接解析为这样的结构:
#[derive(Deserialize)]
pub struct Config {
value: bool
}
我将如何为用户添加能够输入 bool
或 object
的选项:
{
value: {
avanced_value: true
}
}
我试过像这样使用 enum
但似乎 bool
不能在枚举中使用。
#[derive(Deserialize)]
pub struct Config {
value: ValueEnum
}
#[derive(Deserialize)]
pub enum ValueEnum {
bool,
Config(ValueConfig),
}
#[derive(Deserialize)]
pub struct ValueConfig {
advanced_value: bool
}
我是否遗漏了一些明显的东西,或者我应该重组输入 json? 提前Tnx.
您没有将 bool 包装在枚举变体中(就像您对 ValueConfig 所做的那样)。同样默认情况下,serde 标记枚举,这可能不是您想要的。您想要使用未标记的枚举:
#[derive(Deserialize)]
pub struct Config {
value: ValueEnum
}
#[derive(Deserialize)]
#[serde(untagged)]
pub enum ValueEnum {
Bool(bool),
Config(ValueConfig),
}
#[derive(Deserialize)]
pub struct ValueConfig {
advanced_value: bool
}