https://github.com/qvecs/qjson5
📎 A quick JSON5 implementation written in C, with Python bindings.
https://github.com/qvecs/qjson5
c json5 python
Last synced: about 2 months ago
JSON representation
📎 A quick JSON5 implementation written in C, with Python bindings.
- Host: GitHub
- URL: https://github.com/qvecs/qjson5
- Owner: qvecs
- License: mit
- Created: 2025-01-11T22:56:39.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-18T22:03:56.000Z (about 1 year ago)
- Last Synced: 2025-11-05T16:13:10.240Z (8 months ago)
- Topics: c, json5, python
- Language: C
- Homepage:
- Size: 38.1 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 📎 Quick JSON5 _(qjson5)_
A quick [JSON5](https://json5.org/) implementation written in C, with Python bindings.
## Install
```
pip install qjson5
```
## Usage
```python
import qjson5
data = {
"key": "value",
"array": [1, 2, 3],
"object": {
"nested": "value"
}
}
encoded = qjson5.dumps(data)
print(f"Encoded: {encoded}")
decoded = qjson5.loads(encoded)
print(f"Decoded: {decoded}")
```
### Complex Usage
```json5
{
// comments
unquoted: 'and you can quote me on that',
singleQuotes: 'I can use "double quotes" here',
lineBreaks: "Look, Mom! \
No \\n's!",
hexadecimal: 0xdecaf,
leadingDecimalPoint: .8675309, andTrailing: 8675309.,
positiveSign: +1,
trailingComma: 'in objects', andIn: ['arrays',],
"backwardsCompatible": "with JSON",
}
```
```python
import qjson5
with open("in.json5") as f_in:
with open("out.json", "w") as f_out:
qjson5.dump(qjson5.load(f_in), f_out, indent=4)
```
```json
{
"unquoted": "and you can quote me on that",
"singleQuotes": "I can use \"double quotes\" here",
"lineBreaks": "Look, Mom! No \\n's!",
"hexadecimal": 912559,
"leadingDecimalPoint": 0.8675309,
"andTrailing": 8675309,
"positiveSign": 1,
"trailingComma": "in objects",
"andIn": [
"arrays"
],
"backwardsCompatible": "with JSON"
}
```
## Benchmark
Comparing with the other JSON5 libraries:
* [pyjson5](https://pypi.org/project/pyjson5/)
* [json5](https://pypi.org/project/json5/)
Non-JSON5 library:
* [json](https://docs.python.org/3/library/json.html) (built-in)
```bash
==== JSON Libraries Dump+Load Benchmark ====
--- Data Set: SMALL (10 keys per level, 2 levels) ---
json5 => avg: 5274.9761 ms (std: 74.0018 ms) over 1000 iterations
builtin-json => avg: 14.1933 ms (std: 0.5063 ms) over 1000 iterations
pyjson5 => avg: 11.7564 ms (std: 0.1826 ms) over 1000 iterations
qjson5 => avg: 8.4363 ms (std: 0.0669 ms) over 1000 iterations
--- Data Set: MEDIUM (100 keys per level, 10 levels) ---
json5 => Skipped
builtin-json => avg: 150.4009 ms (std: 1.8448 ms) over 500 iterations
pyjson5 => avg: 147.5031 ms (std: 0.8454 ms) over 500 iterations
qjson5 => avg: 98.7803 ms (std: 0.3422 ms) over 500 iterations
--- Data Set: LARGE (1000 keys per level, 50 levels) ---
json5 => Skipped
builtin-json => avg: 150.6014 ms (std: 3.4461 ms) over 10 iterations
pyjson5 => Error: Maximum nesting level exceeded near 4642
qjson5 => avg: 99.5796 ms (std: 0.9641 ms) over 10 iterations
```
See `scripts/benchmark.py` for benchmarking details.