1 个不稳定版本
0.1.4 | 2023年9月13日 |
---|
#2985 在 解析器实现
每月 23 次下载
4MB
724 行
no_std
中的小型 JSON 解析器
该库读取并解析 JSON 字符串。
其预期用途是读取一次 JSON 负载。
它不进行数据序列化。
示例用法
只需将其放入您的 Cargo.toml
[dependencies]
microjson = "0.1"
您可以轻松读取字符串和整数
# use microjson::{JSONValue, JSONParsingError};
# fn main() -> Result<(), JSONParsingError> {
let integer = JSONValue::parse("42")?;
let value : isize = integer.read_integer()?;
let string = JSONValue::parse("\"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::parse(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::parse(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::parse(input)?;
match object.value_type {
JSONValueType::String => {},
JSONValueType::Number => {},
JSONValueType::Object => {},
JSONValueType::Array => {},
JSONValueType::Bool => {},
JSONValueType::Null => {},
}
# Ok(())
# }
验证数据
要加载一些 JSON,您只需调用
# use microjson::JSONValue;
let value = JSONValue::parse(r#" [1,2,3,5"foo"] "#);
然而,这些数据是格式错误的。 JSONValue::parse
将返回一个 Ok
结果,因为确定数据已损坏需要扫描整个字符串。错误只有在您尝试迭代到第四项并将其解析为值时才会报告。
如果您需要知道数据是否健全,请使用 JSONValue::verify
。或者,您可以在一步中解析和验证。
# use microjson::JSONValue;
let value = JSONValue::parse_and_verify(r#" [1,2,3,5"foo"] "#);
功能
- 所有 JSON 类型
- 带有转义序列的字符串
- 解析整数(使用内置解析器)
- 解析浮点数(使用内置解析器)
- 数组的迭代器
- 对象键查找
- 对象的迭代器
- 验证 JSON