2

各位,我最近才接触到rust,现在想用rust写一个静态网站。现在我有一个非常基本的问题。代码如下:

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);
}

如何将帖子转换为 json,例如:

[{
    "title": "the title",
    "created": "2021/06/24",
    "link": "/2021/06/24/post",
    "description": "description",
    "content": "content",
    "author": "jack",
}]
4

1 回答 1

3

最简单和最干净的解决方案是使用serde的派生能力从 Rust 结构派生 JSON 结构:

use serde::{Serialize};

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

标准集合Serialize在其内容执行时自动实现。

因此,您可以使用构建您的 json 字符串

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)?;

操场

于 2021-06-24T09:22:50.160 回答