# `p-json` — Petr Sabanov's JSON Parser
[](https://crates.io/crates/p-json)
[](https://docs.rs/p-json/latest/p-json)
[](https://gitlab.com/pasabanov/p-json/-/releases/permalink/latest)
Written out of pure interest.
### Features
- No `unsafe`.
- Fully self-contained.
- Clear and minimal API.
- Doesn't require `serde`.
### Disadvantages
- Doesn't accept [UTF-16 surrogate characters](https://en.wikipedia.org/wiki/UTF-16#U+D800_to_U+DFFF_(surrogates)).
- Doesn't work with `serde`.
### Usage
To use `p-json` in your project, simply add it to your `Cargo.toml`:
```toml
p-json = "x.y.z"
```
## Examples
### Parsing
```rust
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
```rust
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
```rust
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
