#json #json-path #sql

bin+lib sql-json-path

Rust 中 SQL/JSON Path 实现

1 个不稳定版本

0.1.0 2023 年 11 月 29 日

#655数据结构

Download history 3886/week @ 2024-03-25 3630/week @ 2024-04-01 3466/week @ 2024-04-08 3757/week @ 2024-04-15 3275/week @ 2024-04-22 1269/week @ 2024-04-29 3019/week @ 2024-05-06 2304/week @ 2024-05-13 2165/week @ 2024-05-20 1095/week @ 2024-05-27 875/week @ 2024-06-03 673/week @ 2024-06-10 710/week @ 2024-06-17 533/week @ 2024-06-24 911/week @ 2024-07-01 618/week @ 2024-07-08

2,811 每月下载量

Apache-2.0

105KB
2.5K SLoC

sql-json-path

Build status Crate Docs

SQL/JSON Path 的 Rust 实现。

功能

用法

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 文档

  • strictlax 模式
  • $: 根对象
  • @: 当前对象
  • [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