8 个稳定版本
3.0.0 | 2024 年 7 月 23 日 |
---|---|
2.2.2 | 2024 年 4 月 24 日 |
2.2.1 | 2024 年 3 月 27 日 |
2.1.0 | 2023 年 11 月 27 日 |
1.0.0 | 2023 年 5 月 27 日 |
#11 在 #deserialize-json
1,965 每月下载量
在 3 crates 中使用
18KB
299 行
sqlx-transparent-json-decode
此 crate 旨在与 sqlx 一起使用,并允许您从 PostgreSQL 中查询 JSON 或 JSONB 字段,而无需将类型包装在 sqlx::types::Json<>
包装类型中。
use serde::{Deserialize, Serialize};
use sqlx_transparent_json_decode::sqlx_json_decode;
#[derive(Serialize, Deserialize)]
pub struct SomeJsonField {
// Whatever fields match the JSON structure
pub name: String,
pub some_param: Option<String>,
pub count: i32,
}
sqlx_json_decode!(SomeJsonField);
#[derive(sqlx::FromRow)]
pub struct QueryResult {
pub id: i32,
pub name: String,
pub params: SomeJsonField,
}
通常,您需要使用 Json<SomeJsonField>
作为上面示例中 params
的类型。此 crate 允许您直接使用 SomeJsonField
。
let result = sqlx::query_as!(
QueryResult,
r##"SELECT id,
name,
params as "params: SomeJsonField"
FROM some_table"##,
).fetch_one(&pool).await?;
此 crate 还提供了 BoxedRawValue
,它是 Box<serde_json::value::RawValue>
的包装器,可以直接解码。否则,使用 sqlx 的查询宏很难做到这一点。
let result = sqlx::query!(
r##"SELECT id, data as "data: BoxedRawValue" FROM table##"
).fetch_one(&pool).await?;
依赖项
~11–22MB
~344K SLoC