#json-parser #json #parse-json #allocations #string #read #data

无 std pagefind_microjson

无需分配的简洁 JSON 解析

1 个不稳定版本

0.1.4 2023年9月13日

#2985解析器实现

每月 23 次下载

GPL-3.0-only

4MB
724

no_std 中的小型 JSON 解析器

Build Status Latest Version Coverage Status Docs

该库读取并解析 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

无运行时依赖