19 个版本 (1 个稳定版)
1.0.0 | 2023 年 12 月 29 日 |
---|---|
0.12.0 | 2023 年 6 月 17 日 |
0.11.0 | 2023 年 6 月 12 日 |
0.9.0 | 2023 年 2 月 6 日 |
0.1.2 | 2022 年 3 月 15 日 |
#894 in 解析器实现
每月 99 次下载
130KB
3K SLoC
ksql —
是一个 JSON 数据表达式词法分析器、解析器、CLI 和库。
如何安装 CLI
~ cargo install ksql
用法
use ksql::parser::{Parser, Value};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>>{
let src = r#"{"name":"MyCompany", "properties":{"employees": 50}"#.as_bytes();
let expression = ".properties.employees > 20";
let ex = Parser::parse(expression.as_bytes())?;
let result = ex.calculate(src)?;
assert_eq!(Value::Bool(true), result);
Ok(())
}
CLI 用法
~ ksql '(.field1 + 1) /2' '{"field1": 1}'
or
echo '{"field1": 1}' | ksql '(.field1 + 1) /2'
表达式
表达式支持大多数数学和字符串表达式,详情见下文。
语法 & 规则
令牌 | 示例 | 语法规则 |
---|---|---|
等于 |
== |
支持 == 和 = 。 |
加法 |
+ |
N/A |
减法 |
- |
N/A |
乘法 |
* |
N/A |
除法 |
/ |
N/A |
大于 |
> |
N/A |
大于等于 |
>= |
N/A |
小于 |
< |
N/A |
小于等于 |
<= |
N/A |
开括号 |
( |
N/A |
闭括号 |
) |
N/A |
开方括号 |
[ |
N/A |
闭方括号 |
] |
N/A |
逗号 |
, |
N/A |
引号字符串 |
"sample text" |
必须以未转义的 " 字符开始和结束。 |
数字 |
123.45 |
必须以空格或 '+' 或 '-' 开始和结束,当表达式中的硬编码值为表达式时,并支持 0-9 +- e 字符用于数字和指数表示法。 |
布尔值真 |
true |
只接受 true 作为布尔值。 |
布尔值假 |
false |
只接受 false 作为布尔值。 |
选择器路径 |
.selector_path |
以 . 开头,以空白字符结束。此crate当前使用 gjson,因此支持完整的gjson语法。 |
与 |
&& |
N/A |
非 |
! |
必须在布尔标识符或表达式之前,或紧随操作之后。 |
或 |
|| |
N/A |
包含 |
CONTAINS |
以空白字符结束。 |
包含任何 |
CONTAINS_ANY |
以空白字符结束。 |
包含所有 |
CONTAINS_ALL |
以空白字符结束。 |
在 |
IN |
以空白字符结束。 |
介于 |
BETWEEN |
以空白字符开始和结束。示例 1 BETWEEN 0 10 |
StartsWith |
STARTSWITH |
以空白字符结束。 |
EndsWith |
ENDSWITH |
以空白字符结束。 |
NULL |
NULL |
N/A |
Coerce |
COERCE |
使用 'Identifier' 结合将一种数据类型强制转换为另一种类型。语法为 COERCE <expression> _identifier_ 。 |
Identifier |
_identifier_ |
以 _ 开头和结尾,与 'COERCE' 一起使用以转换数据类型,请参阅下表中的支持值。如果用逗号分隔,可以组合多个转换。 |
Colon |
: |
N/A |
COERCE 类型
Type | 描述 |
---|---|
_datetime_ |
尝试将类型转换为 DateTime。 |
_lowercase_ |
将文本转换为小写。 |
_uppercase_ |
将文本转换为大写。 |
_title_ |
将文本转换为标题格式,首字母大写,其余小写。 |
_string_ |
将值转换为字符串,并支持具有纳秒精度的值字符串、数字、布尔值和 DateTime。 |
_number_ |
将值转换为 f64 数字,并支持 Null、字符串、数字、布尔值和 DateTime。 |
_substr_[n:n] |
这允许从字符串值中提取子字符串。如果指定的索引处没有匹配项,则返回 Null。 |
许可证
根据您的选择,受 Apache License 2.0 或 MIT 许可证的许可。请参阅以下链接:Apache License, Version 2.0 或 MIT license。除非您明确说明,否则您提交给 Proteus 的任何贡献,根据 Apache-2.0 许可证的定义,将按上述方式双重许可,不附加任何其他条款或条件。
依赖项
~7MB
~75K SLoC