#json #表达式解析器 #json 解析器 #表达式 #解析器

bin+lib ksql

A JSON 数据表达式词法分析器、解析器、CLI 和库

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 解析器实现

Download history 99/week @ 2024-07-30

每月 99 次下载

MIT/Apache

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.0MIT license
除非您明确说明,否则您提交给 Proteus 的任何贡献,根据 Apache-2.0 许可证的定义,将按上述方式双重许可,不附加任何其他条款或条件。

依赖项

~7MB
~75K SLoC