#json-parser #json #zero-copy #parser #json-key

bin+lib jsode

简单、零拷贝且无依赖的 JSON 解析器

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

MIT 许可证

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