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



我试图使用镍模板返回JSON文件。我发现了一些API示例代码,返回JSON响应并修改它:

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等)通常会出现格式错误文档或不正确转义数据的问题。

最新更新