如何从 Rust (Rocket) HTTP 端点返回 JSON?

fun*_*err 9 rust rust-rocket

在 Rust 中通过 Rocket 返回 Json 最简单的方法是什么?

#[post("/route", data = "<data>")]
fn route(someVariable: String) -> String {
    // How can I return a json response here? {"a": "{someVariable}")
}
Run Code Online (Sandbox Code Playgroud)

我尝试过:content::Json()但对我来说似乎太静态了。

Ell*_*nns 5

如果您发现content::Json()太静态,您可以使用该rocket_contrib包。使用此包将允许您传递Deserialize从 serde 包实现的结构

use rocket_contrib::json::Json;
use serde::Deserialize;

#[derive(Deserialize)]
struct User {
  name: String,
  age: u8,
  alive: bool, 
}

#[post("/route", data = "<data>")]
fn route(someVariable: String) -> String {
    let user = User {
        name: "Jon Snow".to_string(),
        age: 21,
        alive: true,
    };
    Json(user_from_id)
}
Run Code Online (Sandbox Code Playgroud)

确保将依赖项添加到您的Cargo.toml

serde = { version = "1.0", features = ["derive"] }
rocket_contrib = "0.4"
Run Code Online (Sandbox Code Playgroud)

有关 Rocket_contrib 的更多信息https://api.rocket.rs/v0.4/rocket_contrib/json/struct.Json.html