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