p-json 0.1.0

Petr Sabanov's JSON implementation
Documentation
  • Coverage
  • 1.37%
    1 out of 73 items documented1 out of 30 items with examples
  • Size
  • Source code size: 50.8 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 456.4 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 10s Average build duration of successful builds.
  • all releases: 10s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • pasabanov/my-json
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • pasabanov

p-json — Petr Sabanov's JSON Parser

crates.io version docs.rs documentation GitLab latest release

Written out of pure interest.

Features

  • No unsafe.
  • Fully self-contained.
  • Clear and minimal API.
  • Doesn't require serde.

Disadvantages

Usage

To use p-json in your project, simply add it to your Cargo.toml:

p-json = "x.y.z"

Examples

Parsing

use p_json::{JsonValue, parse};
use indexmap::{IndexMap, indexmap};

fn main() {
	let text = r#"{"id":123,"name":"Alice","active":true}"#;
	let json = parse(text).unwrap();

	assert_eq!(json, JsonValue::Object(indexmap!{
		"id".to_string() => JsonValue::Number(123.0),
		"name".to_string() => JsonValue::String("Alice".to_string()),
		"active".to_string() => JsonValue::Bool(true),
	}));
}

Stringification

use p_json::{JsonValue, stringify};
use indexmap::{IndexMap, indexmap};

fn main() {
	let mut json = JsonValue::Object(indexmap!{
		"id".to_string() => JsonValue::Number(123.0),
		"name".to_string() => JsonValue::String("Alice".to_string()),
		"active".to_string() => JsonValue::Bool(true),
	});

	let text = stringify(&json);
	assert_eq!(text, r#"{"id":123,"name":"Alice","active":true}"#);
}

Validation

fn main() {
	let valid = r#"{"key": "value"}"#;
	let invalid = r#"{"key": "value""#;

	assert!(p_json::parse(valid).is_ok());
	assert!(p_json::parse(invalid).is_err());
}

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Copyright

© 2025 Petr Aleksandrovich Sabanov

Metrics

crate size