use std::fmt;
use std::fs::File;
use serde::Deserialize;
#[derive(Deserialize)]
struct Name {
name: String
}
#[derive(Deserialize)]
struct Age {
age: u32
}
fn main() {
let file = File::open("person.json").unwrap();
let value: serde_json::Value = serde_json::from_reader(file).unwrap();
let name= Name {
name: serde_json::from_value(value["name"].clone()).unwrap()
};
let age = Age {
age: serde_json::from_value(value["age"].clone()).unwrap()
};
}
3条答案
按热度按时间hkmswyz61#
创建第三个结构体,包含其他每个结构体,并使用
#[serde(flatten)]
将每个字段反序列化,就像它是一个单一的平面结构体一样:playground
sqxo8psd2#
这看起来是一种非常不寻常的反序列化JSON的方法。好奇是什么让你想要这样的结构。
最简单的方法应该是以下方法之一:
Value
示例并从那里获取它;#[serde(flatten)]
。如果你想有更多的这样的结构,每个结构都有一个同名的属性,你可以编写一个宏或自定义反序列化器。
作为一个侧节点,可以使用小写结构名,但在Rust中并不习惯。
1szpjjfi3#
正如@at54321所建议的,这里有一种使用Value的方法: