特性 `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,
}
当我在 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,
}