geri

Rust ile json serialization

13/07/2020

Bugün Rust ekosisteminde json serialization/deserialization tarafında neler olduğuna bakmak istedim. İlk arama sonucu olarak karşıma serde çıktı. Kullanmak için önce Cargo.toml dosyasına aşağıdaki satırları eklemek gerekiyor.

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

Şimdi de json’dan deserialize etmek üzere bir Server struct tanımlayalım.

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Server {
    name: String,
    memory: u64,
    ipAddresses: Vec<String>,
}

Artık bir json string’den Server elde etmek oldukça kolay.

let data = r#"
    {
        "name": "Monty Python",
        "memory": 17179869184,
        "ipAddresses": [
            "10.0.0.1",
            "10.0.0.2"
        ]
    }"#;

let server: Server = serde_json::from_str(data)?;

println!("{} is at {}", server.name, server.ipAddresses[0]);

json! macrosu ile doğrudan json oluşturabiliyoruz.

let name = "Monty Python";
let memory = 17179869184u64;

let server = json!({
    "name": name,
    "memory": memory,
    "ipAddresses": [
        "10.0.0.1",
        "10.0.0.2"
    ]
});

println!("{}", server.to_string());

Json transformation da beklediğimden çok daha kolay oldu.

let name = "Monty Python";
let memory = 17179869184u64;

let mut server = json!({
    "name": name,
    "memory": memory,
    "ipAddresses": [
        "10.0.0.1",
        "10.0.0.2"
    ]
});

server["memory"] = Value::String("16GB".to_owned());

println!("{}", server.to_string());

Daha karmaşık bir json’ı da transform etmek mümkün.

let name = "Monty Python";
let memory = 17179869184u64;

let mut server = json!({
    "name": name,
    "memory": memory,
    "ipAddresses": [
        {
            "address": "10.0.0.1"
        }
    ]
});

server["ipAddresses"][0]["address"] = Value::String("10.0.0.2".to_owned());

println!("{}", server.to_string());

Yarın başka bir konu ile görüşmek üzere👋

Follow me on Twitter