12个版本
0.2.1 | 2024年2月17日 |
---|---|
0.2.0 | 2024年2月17日 |
0.1.9 | 2024年2月16日 |
#645 in 解析器实现
用于 rusty_json
49KB
1K SLoC
JSON解析器
此Rust crate提供了一种强大而高效的解决方案,用于将JSON数据解析到Rust的强类型数据结构中。它旨在简化将JSON文本转换为Rust类型的过程,并允许您通过基于模式验证来验证您的JSON数据,使您更容易在Rust应用程序中处理JSON数据。
功能
- 强类型:利用Rust的类型系统确保JSON数据被解析到正确的Rust数据结构中。
- 错误处理:提供全面错误处理,以捕获和管理解析错误,使您的应用程序更健壮。
- 基于模式验证:这确保了JSON数据遵循预定义的模式,减少了运行时错误,增强了数据完整性,并允许您在验证之前转换JSON值。
入门
要在此项目中使用此crate,请将其添加到您的 Cargo.toml
[dependencies]
jsonparser = "0.2.1"
然后,在您的Rust文件中导入它
use jsonparser::*;
基本用法
解析JSON到Rust
要将JSON字符串解析为Rust的 JSONValue
,请使用crate提供的 from
函数
use jsonparser::JSONParser;
let input = r#"
{
"name": "John Doe",
"age": 30,
"is_student": false
}
"#;
match JSONParser::from(input) {
Ok(json) => println!("{:#?}", json),
Err(e) => eprintln!("Failed to parse JSON: {}", e),
}
访问数据
解析后,使用 .get()
方法或对象和数组的索引语法来访问数据
// Using `.get()` method
if let Some(name) = json.get("name").and_then(|v| v.as_str()) {
println!("Name: {}", name);
}
// Using indexing syntax
let age = &json["age"];
if let Some(age) = age.as_f64() {
println!("Age: {}", age);
}
序列化
要将Rust数据结构序列化为JSON字符串,请使用 serialize
方法
use jsonparser::{JSONParser, JSONValue};
let json: JSONValue = JSONParser::from(r#"{ "name": "John Doe", "age": 30, "is_student": false }"#).unwrap();
let serialized = json.serialize();
assert_eq!(serialized, r#"{"name":"John Doe","age":30,"is_student":false}"#);
验证
要验证JSONValue,请使用 validate
方法
use jsonparser::{JSONParser, JSONValue, JSONSchema, StringType, NumberType, BooleanType};
let json: JSONValue = JSONParser::from(r#"{ "name": "John Doe", "age": 30, "is_student": false }"#).unwrap();
let schema = JSONSchema::new([
("name", StringType::new().min_length(3).trim().boxed()),
("age", NumberType::new().gt(18).lt(100).boxed()),
("is_student", BooleanType::new().falsy().boxed()),
]);
assert!(schema.validate(&json).is_ok());
贡献
欢迎贡献!如果您有改进建议或发现任何问题,请在 GitHub 上打开问题或提交拉取请求。
许可
本项目采用 Apache-2.0 许可证。