5 个版本
0.2.0 | 2024年5月19日 |
---|---|
0.1.3 | 2024年4月16日 |
0.1.2 | 2024年4月16日 |
0.1.1 | 2024年4月16日 |
0.1.0 | 2024年4月16日 |
在 解析实现 中排名第 1713
105KB
1.5K SLoC
JSON ❤️ Oxide = Jsode
[!警告] 此项目处于积极开发中,存在错误和未解决的问题 问题。请考虑在用于生产时使用。
概述
简单、零拷贝且无依赖的 JSON 解析器
安装
cargo add jsode
入门指南
1. 索引 JSON 键
use jsode::prelude::*;
fn main() -> jsode::Result<()> {
let mut src = JsonParser::new("{ 'hello': 'world' }");
let ast = src.parse()?;
assert!(ast.index("hello").is_some());
assert!(ast.index("none_exist_key").is_none());
Ok(())
}
2. 获取/反序列化单个 JSON 属性
use jsode::prelude::*;
fn main() -> jsode::Result<()> {
let mut src = JsonParser::new("{ 'hello': 'world' }");
let ast = src.parse()?;
assert_eq!("world", ast.index("hello").unwrap().parse_into::<String>()?);
Ok(())
}
3. 反序列化到结构体
use jsode::prelude::*;
#[derive(Deserialize, PartialEq, Debug)]
struct Color {
#[prop = "r"]
red: u8,
#[prop = "b"]
blue: u8,
green: u8,
}
fn main() -> jsode::Result<()> {
let mut src = JsonParser::new(r#"{
'r': 255,
'b': 96,
'green': 0,
}"#);
let ast = src.parse()?;
let expected = Color {
red: 255,
blue: 96,
green: 0,
};
assert_eq!(expected, ast.parse_into::<Color>()?);
Ok(())
}
依赖
~275–720KB
~17K SLoC