jsode

Crates.iojsode
lib.rsjsode
version0.2.0
sourcesrc
created_at2024-04-16 14:28:30.355092
updated_at2024-05-19 07:19:57.954998
descriptionSimple, zero-copy & zero-dependency JSON Parser
homepage
repositoryhttps://github.com/taminhtienhai/jsode
max_upload_size
id1210319
size787,761
HaiTa (taminhtienhai)

documentation

https://docs.rs/jsode/0.2.0

README

JSON :heart: Oxide = Jsode

[!WARNING] This project is under heavy development which contain bugs and unresolve issues. Please consider when using it for prouduction.

Overview

Simple, zero-copy & zero-dependency JSON Parser

Install

cargo add jsode

Getting Started

1. Index JSON key

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. Getting/Deserialize single JSON's property

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. Deserialize into struct

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(())
}
Commit count: 64

cargo fmt