json - 如何使用 Nickel 模板返回 JSON 文件?

标签 json rust nickel

我正在尝试使用 Nickel 模板返回 JSON 文件。我找到了一些返回 JSON 响应的 API 示例代码并对其进行了修改:

extern crate rustc_serialize;
#[macro_use]
extern crate nickel;

use nickel::{Nickel, HttpRouter, JsonBody};
use nickel::mimes::MediaType;
use nickel::status::*;
use rustc_serialize::json;
use std::collections::HashMap;

#[derive(RustcDecodable, RustcEncodable)]
struct Person {
    firstname: String,
    lastname: String,
}

fn main() {
    let mut server = Nickel::new();

    server.get("/post", middleware! { |request, mut response|

        let person: Person = Person { firstname: "firstName ".to_string(), lastname: "lastName".to_string()};

        let mut p: Vec<Person> = vec![];

        p.push(person);

        let json_data = json::encode(&p).unwrap();
        let mut data_result = "{\"status\": 200, \"data\":".to_owned();
        data_result.push_str(&json_data.to_string());

        data_result.push_str("}");

        response.set(StatusCode::Ok);
        response.set(MediaType::Json);
        format!("{}", data_result)
    });

    server.get("/json", middleware! { |_, response|
        let mut data = HashMap::new();
        data.insert("name", "user");
        return response.render("app/views/temp.tpl", &data);
        // template source 
        //
        //{name: {{name}}}
        //
    });

    server.listen("127.0.0.1:6767");
}

/post 返回这个 JSON:

{ "status": 200, "data": [{ "firstname": "firstName ", "lastname": "lastName" ]}

/json 返回此文本:

"name: user"

如何使用模板返回 JSON 文件?

最佳答案

它实际上返回

{name: user}

您需要做的就是添加 response.set(MediaType::Json); 就像您在其他处理程序中已经一样:

#[macro_use]
extern crate nickel;

use nickel::{Nickel, HttpRouter};
use nickel::mimes::MediaType;
use std::collections::HashMap;

fn main() {
    let mut server = Nickel::new();

    server.get("/json", middleware! { |_, mut response| {
        let mut data = HashMap::new();
        data.insert("name", "user");
        response.set(MediaType::Json);
        return response.render("app/views/temp.tpl", &data);
    }});

    server.listen("127.0.0.1:6767");
}

现在,这可能不是一个的主意。通过字符串连接创建结构化格式(CSV、JSON、XML 等)通常会遇到格式错误的文档或不正确转义数据的问题。

关于json - 如何使用 Nickel 模板返回 JSON 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39444386/

相关文章:

request - 如何在 Rust 中使用 tokio_proto 和 tokio_service 流式传输消息

rust - 如何使用 'on_send'镍 react 的方法?

rust - 不能借用 `*request` 作为可变的,因为它也被借用为不可变的

python - HTML 和 BeautifulSoup : how to iteratively parse when the structure is not always known beforehand?

php - 如何使用这样的脚本或文本编辑器批量更新位于 .html 文件中的基本一对一 key 结构?

rust - 为什么 Mutex 包含一个 Box?

rust - 如何在 Rust 和 Nickel 中将查询结果选择为 JSON?

javascript - DOM 中的缓存对象与 javascript 变量

python - 使用 Jmespath 按 JSON 中的部分字符串匹配过滤

debugging - 如何在调试 MSVC ABI Rust 程序时检查变量值?