2015-10-21 4 views
10

Я пытаюсь понять, как десериализовать JSON в структуру с помощью Серда. Например, пример JSON на serde_json-х own documentation содержит следующие данные:Примеры десериализации Rust & Serde JSON?

{ 
    "FirstName": "John", 
    "LastName": "Doe", 
    "Age": 43, 
    "Address": { 
     "Street": "Downing Street 10", 
     "City": "London", 
     "Country": "Great Britain" 
    }, 
    "PhoneNumbers": [ 
     "+44 1234567", 
     "+44 2345678" 
    ] 
} 

Теперь, если мы предположим, что приведенные выше данные в переменной «вход» и следующий фрагмент кода:

let deserialized_data: Data = serde_json::from_str(input).unwrap(); 

... Какая должна быть структура Data?

ответ

12

Большинство стандартных структур данных сериализуемы, поэтому следующие структуры должны работать:

#[derive(Serialize, Deserialize)] 
struct Data { 
    FirstName: String, 
    LastName: String, 
    Age: u32, 
    Address: Address, 
    PhoneNumbers: Vec<String> 
} 

#[derive(Serialize, Deserialize)] 
struct Address { 
    Street: String, 
    City: String, 
    Country: String 
} 

Если какой-либо из полей ввода может отсутствовать, то соответствующие структуры поля должны быть Option<T> вместо того, чтобы просто T ,

Обратите внимание, что можно назвать поля в более манере «Расти», т.е. snake_case, потому что serde поддерживает переименование аннотаций:

#[derive(Serialize, Deserialize)] 
struct Address { 
    #[serde(rename="Street")] 
    street: String, 
    #[serde(rename="City")] 
    city: String, 
    #[serde(rename="Country")] 
    country: String 
} 

This проблема также имеет отношение к полям переименования.

+1

Отложить запрос для документирования: https://github.com/serde-rs/json/pull/15 – vegai

Смежные вопросы