簡體   English   中英

Rust&Serde JSON反序列化示例?

[英]Rust & Serde JSON deserialization examples?

我試圖弄清楚如何使用Serde將JSON反序列化為結構。 例如,serde_json 自己的文檔中的示例JSON包含以下數據:

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

現在,如果我們假設上面的數據是在變量“input”和下面的代碼中:

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

......結構Data應該是什么樣的?

大多數標准數據結構都是可序列化的,因此以下結構應該可以工作:

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

問題也與字段重命名有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM