我知道可用于未知 JSON 的 JSON 值。
我拥有的是一个大部分结构化的 JSON 对象,如下所示:
{
"error": [],
"result": {
"NAME_X": {
"prop_one": "something",
"prop_two": "something",
"decimals": 1,
"more_decimals": 2
},
"NAME_A": {
"prop_one": "test",
"prop_two": "sdfsdf",
"decimals": 2,
"more_decimals": 5
},
"ARBITRARY": {
"prop_one": "something else",
"prop_two": "blah",
"decimals": 3,
"more_decimals": 6
}
}
Run Code Online (Sandbox Code Playgroud)
因此,具有字段 prop_one、prop_two、decimals 和 more_decimals 的内部对象具有清晰的结构,但外部名称字段/键(NAME_X、NAME_A、ARBITRARY)事先未知。
解析此问题的最直接方法是什么,以便我可以在内部结构上使用强类型变量/反序列化?我还需要捕获那些未知的名称字段。
您可以反序列化为一个映射,其键为字符串(“NAME_X”等):
use std::collections::HashMap;
use serde::Deserialize;
use serde_json::Result;
#[derive(Debug, Deserialize)]
struct InThing {
prop_one: String,
prop_two: String,
decimals: u16,
more_decimals: i32,
}
#[derive(Debug, Deserialize)]
struct OutThing {
error: Vec<u8>,
result: HashMap<String, InThing>,
}
fn main() {
let data = r#"
{
"error": [],
"result": {
"NAME_X": {
"prop_one": "something",
"prop_two": "something",
"decimals": 1,
"more_decimals": 2
},
"NAME_A": {
"prop_one": "test",
"prop_two": "sdfsdf",
"decimals": 2,
"more_decimals": 5
},
"ARBITRARY": {
"prop_one": "something else",
"prop_two": "blah",
"decimals": 3,
"more_decimals": 6
}
}
}
"#;
let thing: OutThing = serde_json::from_str(data).unwrap();
dbg!(thing);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4012 次 |
最近记录: |