fupio

Fupio is the easiest way to share online Learn more »

Join Fupio
Fehmi Can Saglam.

Fehmi Can Saglam.

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👋
https://fehmicansaglam.net/json-serde

Comments