2016-09-12 9 views
-3

私は、Nickelテンプレートを使用してJSONファイルを返そうとしています。私は、JSONレスポンスを返すいくつかのAPIのサンプルコードを発見し、それを修正:Nickelテンプレートを使用して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ファイル

答えて

0

それは実際にあなたがする必要があるのはが既に他のハンドラで持っているあなたのようなresponse.set(MediaType::Json);を追加で

{name: user} 

を返します。

#[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など)を作成すると、不正な形式のドキュメントや不適切なエスケープされたデータに問題が生じることがよくあります。

関連する問題