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 在 解析器实现
每月55次下载
在 2 个包中使用 (通过 igdb-api-rust)
4MB
1K SLoC
无 std 的小型 JSON 解析器
此库用于读取和解析 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 并使用标准库。 |