4 个版本

0.1.6 2024年5月22日
0.1.2 2022年7月4日
0.1.1 2021年10月30日
0.1.0 2021年10月24日

#1254解析器实现

Download history 2/week @ 2024-04-19 1/week @ 2024-04-26 92/week @ 2024-05-17 38/week @ 2024-05-24 18/week @ 2024-05-31 23/week @ 2024-06-07 9/week @ 2024-06-14 4/week @ 2024-06-21 9/week @ 2024-07-05 20/week @ 2024-07-12 28/week @ 2024-07-26 5/week @ 2024-08-02

每月55次下载
2 个包中使用 (通过 igdb-api-rust)

GPL-3.0-only

4MB
1K SLoC

无 std 的小型 JSON 解析器

Latest Version Test and lint Coverage Status Docs

此库用于读取和解析 JSON 字符串。

其预期用途是一次性读取 JSON 负载。

它不进行数据序列化。

示例用法

只需将其放入你的 Cargo.toml

[dependencies]
microjson = "0.1"

可以轻松地读取字符串和整数

# use microjson::{JSONValue, JSONParsingError};
# fn main() -> Result<(), JSONParsingError> {
let integer = JSONValue::load("42");

let value : isize = integer.read_integer()?;

let string = JSONValue::load("\"hello there\"");

let value : &str = string.read_string()?;
# Ok(())
# }

可以按这种方式读取数组

# use microjson::{JSONValue, JSONParsingError};
# fn main() -> Result<(), JSONParsingError> {
let input = r#" [0, 1, 2, 3, 4, 5] "#;

let array = JSONValue::load(input);

for (n, item) in array.iter_array()?.enumerate() {
    let value = item.read_integer()?;
    assert_eq!(value, n as isize);
}
# Ok(())
# }

当然,上述所有组合

# use microjson::{JSONValue, JSONParsingError};
# fn main() -> Result<(), JSONParsingError> {
let input = r#" { "arr": [3, "foo", 3.625, false] } "#;

let object = JSONValue::load(input);

assert_eq!(
    object.get_key_value("arr")?.iter_array()?.nth(2).unwrap().read_float()?,
    3.625
);
# Ok(())
# }

如果你不确定你有什么类型的数据,你可以查询 JSONValueType

# use microjson::{JSONValue, JSONValueType, JSONParsingError};
# fn main() -> Result<(), JSONParsingError> {
let input = r#" 3.1415 "#;

let object = JSONValue::load(input);

match object.value_type {
    JSONValueType::String => {},
    JSONValueType::Number => {},
    JSONValueType::Object => {},
    JSONValueType::Array => {},
    JSONValueType::Bool => {},
    JSONValueType::Null => {},
    JSONValueType::Error => {},
}
# Ok(())
# }

验证数据

要加载一些 JSON,只需调用

# use microjson::JSONValue;
let value = JSONValue::load(r#" [1,2,3,5"foo"] "#);

但是,这些数据是格式不正确的。 JSONValue::parse 将返回一个 Ok 结果,因为确定数据已损坏需要扫描整个字符串。错误只会在你尝试迭代到第四个项目并将其解析为值时报告。

如果你需要知道数据是健全的,请使用 JSONValue::verify。或者,你可以一步解析并验证。

# use microjson::JSONValue;
let value = JSONValue::load_and_verify(r#" [1,2,3,5"foo"] "#);

功能标志

可以使用 功能 启用这些标志。

标志 描述
small_number_parsing 用一种 更不精确 且具有更小代码足迹的版本替换 core 浮点解析。
std 包含一个标记以实现 JSONParsingError 的 std::error::Error 并使用标准库。

无运行时依赖