/ / serde_jsonを使用してオブジェクト内のオブジェクトを解析する - json、rust、hyper、serde-json

serde_jsonを使用してオブジェクト内のオブジェクトを解析する - json、rust、hyper、serde-json

私は立ち往生しています、以下は私が受け取っているJSONです:

{
"BCH": {
"aclass": "currency",
"altname": "BCH",
"decimals": 10,
"display_decimals": 5
}
}

私は私の構造体がどのように属性を解析するのに似ているべきかについて少し混乱していますserde_json 木枠以下は私が現在持っているものです:

#[derive(Deserialize, Debug)]
struct Assets  {
aclass: String,
altname: String,
decimals: u8,
display_decimals: u8,
}

#[derive(Deserialize, Debug)]
struct Currency {
assest: Assets,
}


fn to_assets_type(value: serde_json::Value) -> Currency {
serde_json::from_value(value).unwrap()
}

エラーメッセージが表示されます。

「main」スレッドが「」でパニックになった Result::unwrap() 〜に Err 値:ErrorImpl {コード:メッセージ( "フィールドが見つかりません assest")、行:0、 列:0} "、src / libcore / result.rs:860:4

回答:

回答№1は6

HashMapが欲しいと思います。

#[macro_use] extern crate serde;
extern crate serde_json;

use std::collections::HashMap;

static VALUE: &str = r#"{
"BCH": {
"aclass": "currency",
"altname": "BCH",
"decimals": 10,
"display_decimals": 5
}
}"#;

#[derive(Deserialize, Debug)]
struct Assets {
aclass: String,
altname: String,
decimals: u8,
display_decimals: u8,
}

fn main() {
let serde_value: HashMap<String, Assets> = serde_json::from_str(VALUE).unwrap();

println!("{:?}", serde_value);
}

遊び場