1 个不稳定版本
0.1.0 | 2023 年 11 月 29 日 |
---|
#655 在 数据结构
2,811 每月下载量
105KB
2.5K SLoC
sql-json-path
SQL/JSON Path 的 Rust 实现。
功能
- 兼容 SQL/JSON Path 标准和 PostgreSQL 实现。
- 独立于 JSON 实现。支持流行的库,如
serde_json
、simd-json
和jsonbb
。也支持自定义 JSON 类型。
用法
use serde_json::{json, Value};
use sql_json_path::JsonPath;
let json = json!({"a": 1});
let path = JsonPath::new("$.a").unwrap();
let nodes = path.query(&json).unwrap();
assert_eq!(nodes.len(), 1);
assert_eq!(nodes[0].to_string(), "1");
JSON Path 语法
更多详情请参阅 PostgreSQL 文档。
-
strict
和lax
模式 -
$
: 根对象 -
@
: 当前对象 -
[index]
: 数组元素按索引-
[start to end]
: 数组切片 -
[index1, index2, ...]
: 多个数组元素 -
[last]
: 最后一个数组元素
-
-
.name
: 按名称的对象成员 -
[*]
: 任何数组元素 -
.*
: 任何对象成员 -
.**
: 任何后代对象成员(Postgres 扩展) -
?(predicate)
: 过滤表达式-
==
、!=
/<>
、<
、<=
、>
、>=
:比较操作 -
&&
、||
、!
:逻辑运算符 -
is unknown
:检查值是否未知 -
like_regex
:检查字符串是否与正则表达式匹配 -
starts with
:检查字符串是否以指定的前缀开头 -
exists(expr)
:检查表达式是否匹配任何值
-
- 操作
-
+
:加法 / 一元加 -
-
:减法 / 负号 -
*
:乘法 -
/
:除法 -
%
:取模
-
- 方法
-
.type()
-
.size()
-
.double()
-
.ceiling()
-
.floor()
-
.abs()
-
.datetime()
-
.datetime(template)
-
.keyvalue()
-
测试
本库针对 PostgreSQL 回归测试 进行了测试: cargo test --test pg_jsonb_jsonpath
。430个测试中通过325个,96个测试因不支持的功能而跳过,9个测试因实现错误而失败。
许可证
在 Apache License, Version 2.0 许可下发布。
依赖
约3.5–6.5MB
约123K SLoC