XQPath
A jq-inspired expression parser and evaluator for structured data in Rust
🎯 概述
XQPath 是一个用于结构化数据(JSON/YAML)路径提取与操作的高性能 Rust 工具,提供 jq 风格的表达式语法。
双重形态
- Rust 库:嵌入到 Rust 项目中使用
- 命令行工具:处理文件和管道数据
✨ 主要特性
- 路径提取:支持
.field、[index]、*、**等路径语法 - 管道操作:
expr1 | expr2管道操作符 - 逗号操作:
expr1, expr2多路选择 - 内置函数:
length(),keys(),map(),select(),sort_by()等 - 条件表达式:
if-then-else条件判断 - 比较与逻辑:
==,!=,>,<,and,or,not - 错误处理:
try-catch表达式和?操作符 - 字面量:支持字符串、数字、数组、对象字面量
🚀 快速开始
安装
[]
= "1.2.1"
基本用法
使用便利宏
use ;
use json;
let data = r#"
{
"users": [
{"name": "Alice", "age": 30, "active": true},
{"name": "Bob", "age": 25, "active": false}
]
}
"#;
// 查询多个值
let names = query!.unwrap;
// ["Alice", "Bob"]
// 查询单个值
let first_name = query_one!.unwrap;
// Some("Alice")
// 检查路径是否存在
let has_users = exists!.unwrap;
// true
// 计算数量
let user_count = count!.unwrap;
// 2
使用表达式 API
use ;
use json;
let data = json!;
// 基本路径提取
let expr = parse_path_expression?;
let result = evaluate_path_expression?;
// 结果: ["Alice"]
// 管道操作
let expr = parse_path_expression?;
let result = evaluate_path_expression?;
// 结果: [2]
// 条件过滤
let expr = parse_path_expression?;
let result = evaluate_path_expression?;
// 结果: [["Alice"]]
// 条件表达式
let expr = parse_path_expression?;
let result = evaluate_path_expression?;
// 结果: [["senior", "junior"]]
� 便利宏
XQPath 提供了一套简洁易用的宏来简化常见操作:
基础查询宏
query!(data, path)- 查询多个值,返回Vec<Value>query_one!(data, path)- 查询单个值,返回Option<Value>query_or_default!(data, path, default)- 查询值或返回默认值query_as_type!(data, path, Type)- 查询并转换为指定类型
多路径查询宏
query_multi!(data, path1, path2, ...)- 同时查询多个路径query_string!(data, path)- 查询并转换为字符串query_length!(data, path)- 查询数组/对象长度
存在检查宏
exists!(data, path)- 检查单个路径是否存在exists_all!(data, path1, path2, ...)- 检查所有路径是否都存在exists_any!(data, path1, path2, ...)- 检查是否存在任意一个路径
实用工具宏
count!(data, path)- 计算匹配值的数量get_type!(data, path)- 获取值的类型信息extract!(data, path, format)- 提取并转换格式update!(data, path, value)- 更新值(需要updatefeature)
�📖 表达式语法
路径语法
.field- 字段访问[0]- 数组索引[*]- 数组通配符**- 递归通配符
操作符
|- 管道:将左侧结果传递给右侧,- 逗号:收集多个表达式结果==,!=,>,<,>=,<=- 比较操作符and,or,not- 逻辑操作符
内置函数
length()- 获取数组长度keys()- 获取对象键名type()- 获取值类型map(expr)- 数组映射select(condition)- 条件过滤sort(),sort_by(expr)- 排序unique(),reverse()- 数组操作
条件与错误处理
# 条件表达式
if
# 错误处理
🖥️ 命令行工具
# 安装命令行工具
# 基本用法
|
# 从文件读取
# 复杂查询
|
🔧 高级用法
复杂数据处理
let expr = parse_path_expression?;
错误处理
let expr = parse_path_expression?;
📚 文档
🤝 贡献
我们欢迎各种形式的贡献!请查看 文档目录 了解项目详情。
📄 许可证
本项目采用 Apache-2.0 许可证。
设计理念: XQPath 致力于提供简单、高效、可扩展的结构化数据处理体验,无论是在命令行环境还是 Rust 应用程序中。