您的数据完全是动态的,这意味着您无法使用任何好的工具,例如派生Deserialize
.
你需要使用serde_json::Value https://docs.rs/serde_json/1.0.36/serde_json/enum.Value.html,数据所有可能的 JSON 类型的枚举。不过,您可以派生固定结构的结构:
use serde_derive; // 1.0.84
use serde_json::{self, Value}; // 1.0.34
static INPUT: &str = r#"
{
"columns": [
{
"name": "stringColumn",
"type": "string"
},
{
"name": "DateColumn",
"type": "date"
},
{
"name": "NumberColumn",
"type": "number"
}
],
"data": [
[
"This is a string",
1548091093000,
123
]
]
}
"#;
#[derive(Debug, serde_derive::Deserialize)]
struct Thing {
columns: Vec<Column>,
data: Vec<Vec<Value>>,
}
#[derive(Debug, serde_derive::Deserialize)]
struct Column {
name: String,
r#type: String,
}
fn main() {
let data = serde_json::from_str::<Thing>(INPUT);
println!("{:#?}", data)
}
数字可以是整数或浮点数
这已经由serde_json::Number https://docs.rs/serde_json/1.0.36/serde_json/struct.Number.html
也可以看看:
- Serde 能否根据字段的值将 JSON 反序列化为一组类型中的一种? https://stackoverflow.com/q/53018165/155423