3 个稳定版本
1.1.0 | 2022 年 9 月 13 日 |
---|---|
1.0.1 | 2022 年 2 月 21 日 |
1.0.0 | 2022 年 2 月 20 日 |
在 解析器实现 中排名第 2835
55KB
1K SLoC
Parson
Parson 是一个 Rust crate,可以将 JSON 字符串解析为 Rust 类型,以便在另一个 Rust 项目中使用
动机
我对 Rust 的兴趣迅速增长,因为我厌倦了 TypeScript 和 Web 开发。在 Rust 中制作 Parson 可能会让我比目前知道的更多关于 Rust 的知识。学习如何制作解析器也将教会我制作词法分析和解析器的步骤。这是制作我自己的 JavaScript 解释器,我的 Rust 梦想项目的垫脚石。
功能
- JSON 解析到 Rust 类型
- JSON 字符串解析为 Rust 所有权字符串
- JSON 数字解析为 Rust f64
- JSON 布尔值解析为 Rust bool
- JSON 空值无法解析到 Rust,因为没有空值
- 错误信息
- 解析器会告诉你在哪一行和哪一列发生了解析错误
安装
将此添加到您的 Rust 项目的 Cargo.toml
文件中
[dependencies]
...
parson = "<version number>"
用法
由于 JSONValue
结构体实现了 FromStr
,您可以直接从字符串解析它到 JSONValue
。如果解析过程中发生错误,您将得到一个 JSONError
use parson::JSONValue;
fn main() {
let json = r#"{ "key": "value" }"#;
let json_value = json.parse::<JSONValue>().expect("JSON parse failed");
println!("{}", json_value);
}
JSONValue
结构体
JSONValue
结构体包含以下数据之一
JSONValue
有获取每种类型值的方法
get_string(): Result<String,
JSONError
>
get_number(): Result<f64,
JSONError
>
get_boolean(): Result<bool,
JSONError
>
get_null(): Result<&
JSONNull
,
JSONError
>
get_array(): Result<&
JSONArray
,
JSONError
>
get_object(): Result<&
JSONObject
,
JSONError
>
JSONValue
还具有检查值是否为每种类型的方法
is_string(): 布尔类型
is_number(): 布尔类型
is_boolean(): 布尔类型
is_null(): 布尔类型
is_array(): 布尔类型
is_object(): 布尔类型
JSONValue
有一个方法,返回它持有的值的枚举类型
let json_value = /* result of parsing a string */
match json_value.get_type() {
JSONType::String(json_string) => println!("{}", json_string.get_string()),
JSONType::Number(json_number) => println!("{}", json_number.get_number()),
JSONType::Boolean(json_boolean) => println!("{}", json_boolean.get_boolean()),
JSONType::Null(json_null) => println!("Null"),
JSONType::Array(json_array) => println!("{} items", json_array.len()),
JSONType::Object(json_object) => println!("{} pairs", json_object.len()),
}
JSONString
结构体
JSONString
结构体以 String
的形式保存了输入 JSON 中的字符串数据。 JSONString
实现包含一个方法来获取其内部的数据。
get_string(): String
JSONNumber
结构体
JSONNumber
结构体以 f64
的形式保存了输入 JSON 中的数字数据。 JSONNumber
实现包含一个方法来获取其内部的数据。
get_number(): f64
JSONBoolean
结构体
JSONBoolean
结构体以 bool
的形式保存了输入 JSON 中的布尔值数据。 JSONBoolean
实现包含一个方法来获取其内部的数据。
get_boolean(): 布尔类型
JSONNull
结构体
JSONNull
结构体代表了输入 JSON 中的 null 值。由于 Rust 没有表示 Null 值的方法,JSONNull
实现没有获取其内部数据的方法。
JSONArray
结构体
JSONArray
结构体以 Vec<
JSONValue
>
的形式保存了输入 JSON 中的数组数据。 JSONArray
实现包含 3 个方法来获取其内部的数据。
JSONObject
结构体
JSONObject
结构体存储了关于输入 JSON 中对象的元数据,以 IndexMap<String,
JSONValue
>
的形式,这是一个维护了数据添加顺序的 HashMap。`JSONObject` 实现了 3 个方法来获取其中的数据。
JSONError
结构体
JSONError
结构体存储了解析输入 JSON 时发生的错误信息。
JSONError
有一个方法可以获取其中的错误信息。
get_message(): String
致谢
我还在这里学习了如何制作一个基本的 JSON 解析器 这里。我理解并改进了作者编写词法分析和解析器的方式,使 Parson 更加健壮。
构建于
依赖项
~1MB
~16K SLoC