2015-10-21 16 views
10

JSON Serde kullanarak bir yapıya nasıl serileceğini anlamaya çalışıyorum. Örneğin, serde_json en own documentation üzerinde örnek JSON aşağıdaki verileri içerir: Yukarıda veriler değişken "giriş" olduğunu ve varsayarsak, ŞimdiRust & Serde JSON serileştirme örnekleri?

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

aşağıdaki kod parçası:

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

... Yapı Data neye benzemeli?

cevap

12

standart veri yapılarının çoğu seri hale getirilebilir, böylece aşağıdaki yapılar çalışması gerekir: girişteki alanların bazıları mevcut olmayabilir ise

#[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 
} 

, ardından ilgili yapı alanları Option<T> yerine sadece T olmalıdır . serde adlandırma ek açıklamaları destekler çünkü, daha "Paslı" tarzda, yani snake_case alanların adını mümkün olduğunu

Not:

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

This sorunu da yeniden adlandırma alanlara alakalıdır.

+1

Bunu belgelemek için istek çekin: https://github.com/serde-rs/json/pull/15 – vegai