2017-09-06 108 views
4

我卡住了,下面是我收到的JSON:解析對象的對象中有serde_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() 
} 

我收到一條錯誤消息:

線程「主」驚慌失措上Err 值「叫Result::unwrap():ErrorImpl {碼信息(「失蹤現場assest「),行:0, 列:0}」,SRC/libcore/result.rs:860:4

+1

看起來你'json'是一個對象內部的對象.... – Malice

+0

我現在不能測試我的直覺,但我想你應該嘗試重命名你的'Currency'資產領域'BCH'。 – Boiethios

+0

BCH不是靜態的 – BalaB

回答

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); 
} 

playground

+0

非常感謝朋友,它工作得很好。 :) – BalaB