2

Vec<Bookable>ディーゼル ライブラリを使用して、データベースにクエリを実行し、構造体を取得しています。

#[derive(QueryableByName)]
pub struct Bookable {
  #[sql_type = "BigInt"]
  pub id: i64,
  #[sql_type = "Text"]
  pub title: String
}

要素をクエリすると、結果にアクセスできますが、マクロに変換することはできませんVec<Bookable>json!

pub fn get_terms(conn: &MysqlConnection) -> Vec<Bookable> {
  diesel::sql_query(r#"SELECT title, LAST_INSERT_ID() 'id' from bookable_term;"#)
    .load::<Bookable>(conn).expect("Query failed")
}

そして後で私はそれをこのように呼びます:

  let conn = connect();
  let terms = bookable::get_terms(&conn);
  json!({ "data": {
    "items": terms }
  })

問題は、用語をこのオブジェクトに入れ、配列全体を API に送信する方法です。次のように json を文字列化できます。

"items:" &vec!["to", "be", "or", "not", "to", "be"]

しかし、既存の Vec に関しては、コンパイラ エラーが発生します。私は使用してRocketいるので、マクロrocket_contrib::json::JsonValueを保持するjson!

4

1 に答える 1

0

まず、構造体を次のように派生させます-

use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use rocket_contrib::{json::{Json}};

#[derive(QueryableByName, Deserialize, Serialize)]
pub struct Bookable {
  #[sql_type = "BigInt"]
  pub id: i64,
  #[sql_type = "Text"]
  pub title: String
}

次に、次のようなことができます-

 let conn = connect();
 let terms = bookable::get_terms(&conn);
 let mut data: Vec<Bookable> = HashMap::new();
 data.insert("data", terms);
 return Json(Vec<Bookable>);

Json(Vec<Bookable>)また、レスポンスの content-type を json に設定します。

于 2019-09-03T16:03:32.233 に答える