Rust Serde—是否可以将两种不同布局中的json数据映射回单个结构?

Rust Serde—是否可以将两种不同布局中的json数据映射回单个结构?,json,rust,deserialization,json-deserialization,serde,Json,Rust,Deserialization,Json Deserialization,Serde,我试图映射到结构的数据有两种格式: 使用卡\u面,当卡上有多个面时: { "object": "card", "id": "some_id", "lang": "en", "released_at": "2012-02-03", "card_faces": [ { "name": "some_name", "cost": "5", "ctype": "some_type", "colors": [ "R"

我试图映射到结构的数据有两种格式:

使用
卡\u面
,当卡上有多个面时:

{
  "object": "card",
  "id": "some_id",
  "lang": "en",
  "released_at": "2012-02-03",
  "card_faces": [
    {
      "name": "some_name",
      "cost": "5",
      "ctype": "some_type",
      "colors": [
        "R",
        "B"
      ]
    },
    {
      "name": "another_name",
      "cost": "",
      "ctype": "another_type",
      "colors": [
        "R",
        "B"
      ]
    }
  ],
  "set_code": "some_code"
}
当只有一个面(面字段仅放在根目录中)时,没有
卡片面

我希望我的结构始终有一个
Vec
字段。比如:

#[derive(Deserialize)]
struct Card {
  object: String,
  id: String,
  lang: String,
  released_at: String,
  faces: Vec<CardFace>,
  set_code: String,
}
#[派生(反序列化)]
结构卡{
对象:字符串,
id:String,
朗:弦,
发布时间:String,
面孔:Vec,
set_代码:String,
}

是否可以反序列化这些对象并将面字段强制转换为所需的格式,或者在反序列化之前我是否需要操作json?

我将使用中介
枚举执行此操作:

#[派生(反序列化)]
#[塞尔德(未标记)]
枚举卡TMPDESER{
卡片{
对象:字符串,
id:String,
朗:弦,
发布时间:String,
卡片面:Vec,
set_代码:String,
},
单张卡{
对象:字符串,
id:String,
朗:弦,
发布时间:String,
名称:String,
成本:字符串,
ctype:String,
颜色:Vec,
set_代码:String,
},
}
使用
#[serde(untaged)]
属性,您可以透明地反序列化现有的两种数据

现在只需用
#[serde(from=“CardTmpDeser”)]标记实际结构即可。

#[派生(调试、反序列化)]
#[serde(from=“CardTmpDeser”)]
发布结构卡{
对象:字符串,
id:String,
朗:弦,
发布时间:String,
卡片面:Vec,
set_代码:String,
}
卡执行
中的
,您就可以开始了
serde
将使用
CardTmpDeser
自动反序列化数据,但将透明地将其转换为最终类型


()

我只想补充一点,不管是谁设计了这样的JSON,他一定恨别人:只是请不要这样做,孩子们。
#[derive(Deserialize)]
struct Card {
  object: String,
  id: String,
  lang: String,
  released_at: String,
  faces: Vec<CardFace>,
  set_code: String,
}