#json #deserialize-json #postgresql #sqlx #decode #wrapper #query

sqlx-transparent-json-decode

从 Postgres sqlx 查询中解码 JSON,无需使用 Json<> 包装类型

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

Download history 156/week @ 2024-04-22 27/week @ 2024-04-29 8/week @ 2024-05-06 17/week @ 2024-05-13 28/week @ 2024-05-20 26/week @ 2024-05-27 9/week @ 2024-06-03 8/week @ 2024-06-10 5/week @ 2024-06-17 15/week @ 2024-06-24 5/week @ 2024-07-01 8/week @ 2024-07-08 350/week @ 2024-07-15 387/week @ 2024-07-22 576/week @ 2024-07-29 651/week @ 2024-08-05

1,965 每月下载量
3 crates 中使用

MIT/Apache

18KB
299

sqlx-transparent-json-decode

docs.rs docs Download

此 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