9951 explained code solutions for 126 technologies


rustHow to generate struct from json in Rust


Generating struct from json in Rust is possible using the serde crate. serde is a powerful library for serializing and deserializing data structures.

Example code

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Person {
    name: String,
    age: u8,
    phones: Vec<String>,
}

fn main() {
    // Some JSON input data as a &str. Maybe this comes from the user.
    let data = r#"
        {
            "name": "John Doe",
            "age": 43,
            "phones": [
                "+44 1234567",
                "+44 2345678"
            ]
        }"#;

    // Parse the string of data into a Person object. This is exactly the
    // same function as the one that produced serde_json::Value above, but
    // now we are asking it for a Person as output.
    let p: Person = serde_json::from_str(data).unwrap();

    // Do things just like with any other Rust data structure.
    println!("Please call {} at the number {}", p.name, p.phones[0]);
}

Output example

Please call John Doe at the number +44 1234567

Code explanation

  1. use serde::{Deserialize, Serialize}; - This imports the Deserialize and Serialize traits from the serde crate. These traits are used to define how a struct should be serialized and deserialized.

  2. #[derive(Serialize, Deserialize)] - This is a Rust attribute that tells the compiler to generate code for the Serialize and Deserialize traits for the Person struct.

  3. let data = r#" ... "#; - This is a raw string literal that contains the JSON data.

  4. let p: Person = serde_json::from_str(data).unwrap(); - This is the line that actually deserializes the JSON data into a Person struct.

Helpful links

Edit this code on GitHub