特性 `Serialize` 没有为 `Jsonb` 实现

the trait `Serialize` is not implemented for `Jsonb`

当我在 rust diesel 中定义 jsonb 时 diesel = { version = "1.4.7", features = ["postgres","serde_json"] } 是这样的:

#[macro_use]
extern crate diesel;

use diesel::pg::types::sql_types::Jsonb;
use rocket::serde::Deserialize;
use rocket::serde::Serialize;

fn main() {
    println!("hello")
}

#[derive(Queryable,Debug,Serialize,Deserialize,Default)]
//#[table_name = "test"]
pub struct Test {
    pub id: i64,
    pub tags: Jsonb,
}

编译器显示错误:

the trait `Deserialize<'_>` is not implemented for `Jsonb`

我应该怎么做才能让 diesel 处理 PostgreSQL jsonb 数据类型?

我认为您使用的 Jsonb 类型不正确。它是一种数据库列类型,它决定了数据在数据库本身中的编码方式,但不打算在您的应用程序数据结构和消息传递中直接使用。

假设您的 table 定义如下:

table! {
    test {
        id -> Integer,
        tags -> Jsonb,
    }
}

您可以将行转换为这样的结构:

#[derive(Queryable, Debug, Serialize, Deserialize)]
pub struct Test {
    pub id: i64,
    pub tags: serde_json::Value,
}