6

everyone, I just came into contact with rust recently, and now I want to use rust to write a static website. Now I have a very basic problem. The code is as follows:

pub struct Post {
    title: String,
    created: String,
    link: String,
    description: String,
    content: String,
    author: String,
}

fn main() {
let mut posts:Vec<Post> = Vec::new();
let post = Post {
    title: "the title".to_string(),
    created: "2021/06/24".to_string(),
    link: "/2021/06/24/post".to_string(),
    description: "description".to_string(),
    content: "content".to_string(),
    author: "jack".to_string(),
};
posts.push(post);
}

How can I convert posts into json like:

[{
    "title": "the title",
    "created": "2021/06/24",
    "link": "/2021/06/24/post",
    "description": "description",
    "content": "content",
    "author": "jack",
}]
lanqy
  • 3,001
  • 5
  • 25
  • 18

1 Answers1

9

The simplest and cleanest solution is to use serde's derive abilities to have the JSON structure derived from your Rust struct:

use serde::{Serialize};

#[derive(Serialize)]
pub struct Post {
    title: String,
    created: String,
    link: String,
    description: String,
    content: String,
    author: String,
}

Standard collections automatically implement Serialize when their content does.

You can thus build your json string with

let mut posts:Vec<Post> = Vec::new();
let post = Post {
    title: "the title".to_string(),
    created: "2021/06/24".to_string(),
    link: "/2021/06/24/post".to_string(),
    description: "description".to_string(),
    content: "content".to_string(),
    author: "jack".to_string(),
};
posts.push(post);
let json = serde_json::to_string(&posts)?;

playground

Denys Séguret
  • 372,613
  • 87
  • 782
  • 758