#json #diesel #jsonb

diesel_json

用于diesel中JsonB数据处理的自定义Json包装类型

4个版本

0.2.1 2023年7月5日
0.2.0 2023年2月4日
0.1.1 2021年1月18日
0.1.0 2021年1月17日

#528 in 编码

Download history 727/week @ 2024-03-14 539/week @ 2024-03-21 729/week @ 2024-03-28 612/week @ 2024-04-04 612/week @ 2024-04-11 470/week @ 2024-04-18 379/week @ 2024-04-25 551/week @ 2024-05-02 883/week @ 2024-05-09 498/week @ 2024-05-16 463/week @ 2024-05-23 417/week @ 2024-05-30 538/week @ 2024-06-06 695/week @ 2024-06-13 606/week @ 2024-06-20 394/week @ 2024-06-27

2,348 每月下载
用于 2 个crate(通过 warg-server

MIT 许可证

9KB
107

diesel_json

提供了一种包装类型 diesel_json::Json,可以直接用于包装serde可序列化和反序列化的结构,并识别它们为可查询、可插入的JsonB字段。

入门

将diesel_json依赖项添加到Cargo.toml。

  • Diesel 2.0支持:diesel_json = "0.2"
  • Diesel 1.4支持:diesel_json = "0.1"

将数据结构包装到 diesel_json::Json 类型。

#[derive(Serialize, Deserialize, Debug)]
struct ComplexStruct {
  // ...
}

use diesel_json::Json;

#[derive(Serialize, Deserialize, Queryable, Insertable, AsChangeset, Identifiable)]
struct ExampleTable {
    // ...
    // Field that will be stored in Jsonb format
    jsonb_field: diesel_json::Json<ComplexStruct>,
    // Or simply as 
    jsonb_field2: Json<ComplexStruct>,
    // ...
}

Json 类型提供了用于对象初始化的 new 函数,实现了 DerefDerefMutAsRefAsMut 等其他特质,这些特质将数据访问直接映射到底层数据。

参见 tests/postgresql.rs 以获取示例使用方法。

为什么我应该使用这个库?

没有为每个作为JsonB字段存储的唯一类型提供包装类型,您将需要直接使用 serde_json::Value 或实现自己的实现来遵循以下特质

impl<T> FromSql<sql_types::JsonB, Pg> for Json<T> {}
impl<T> ToSql<sql_types::JsonB, Pg> for Json<T> {}

待办事项

  • 不仅支持JsonB,还支持Json PostgreSQL类型
  • 支持更多数据库驱动程序
    • PostgreSQL
    • MySql
    • SQLite
  • 改进库的测试
    • 测试可空/非可空JsonB PostgreSQL字段的插入和检索。
    • 添加支持并测试Json字段的插入和检索
    • 待办事项(扩展):添加对其他数据库驱动程序Json字段的支持

依赖关系

~4MB
~84K SLoC