首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用rust反序列化具有多个可能值的JSON

使用rust反序列化具有多个可能值的JSON
EN

Stack Overflow用户
提问于 2020-09-19 02:43:57
回答 1查看 190关注 0票数 0

所以我正在用Rust (我是个新手)编写一个程序,它读取一个json配置文件,并根据输入做一些事情。我已经成功地使用serde_json解析了json。我想让用户做的下一件事是能够指定一些高级选项,但我不知道如何解析输入。默认的json如下所示:

代码语言:javascript
运行
复制
{
  value: true
}

解析它可以直接转换成这样的结构:

代码语言:javascript
运行
复制
#[derive(Deserialize)]
pub struct Config {
  value: bool
}

我该如何添加选项,以便用户能够输入boolobject

代码语言:javascript
运行
复制
{
  value: {
    avanced_value: true
  }
}

我尝试过使用这样的enum,但似乎不能在枚举中使用bool

代码语言:javascript
运行
复制
#[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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-19 04:03:52

您没有将bool包装在枚举变体中(就像对ValueConfig所做的那样)。另外,在默认情况下,serde标记枚举,这可能不是您想要的。您希望使用未标记的枚举:

代码语言:javascript
运行
复制
#[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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63961206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档