#json #validate-json #validation #data-integrity #parser #serialization #data-structures

bin+lib jsonparser

这是一个Rust crate,用于高效地将JSON数据解析和验证到强类型Rust数据结构中,从而实现数据完整性检查。

12个版本

0.2.1 2024年2月17日
0.2.0 2024年2月17日
0.1.9 2024年2月16日

#645 in 解析器实现


用于 rusty_json

MIT/Apache

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 许可证

无运行时依赖