jsoncgx: An overpowered JSON-with-comments parser with inplace edition
Cool, a JSONC parser for Python. How do I load my file into a dict?
I'll stop you right here. If you're only looking at simply deserialising JSONC files, this library is not for you.
jsoncgx is developped with 3 intentions:
- Supporting C-style
//and C++-style/**/comments. This part is typical, there are lots of other libraries offering this functionality. - Offering more flexibility with the JSON syntax that your usual
straight-to-Python-types parser. Namely, the JSON format allows to have
multiple name:value pairs with the same name in the same object, but that is
not supported by Python's
dicts. - Inplace edition, that is, being able to replace a chunk of a given JSONC file without messing up its indentation or comments. Typically, libraries only offer indentation imitation, that is, deserialisation makes guesses about the indentation, and serialisation reproduces it.
Installation
This library is available on PyPI:
pip install --user jsoncgx
Comparison / Quickstart / Demo
| Standard Python module |
|
|
|---|---|---|
| Loading JSON data |
>>> import json
>>> data = json.loads('{ "answer": 42 }')
>>> data["answer"]
42
|
>>> import jsoncgx
>>> editor = jsoncgx.loads('{ "answer": 42 }')
>>> editor.root["answer"][0]
42
|
| Editing JSON data |
>>> data["answer"] = "spam"
>>> json.dumps(data)
'{"answer": "spam"}'
|
>>> editor.root.editreplacevalue(0, "spam")
>>> editor.dumps()
'{ "answer": "spam" }'
|
| Working with JSON files |
>>> with open("in.json") as f:
... data = json.load(f)
...
>>> with open("out.json", "w") as f:
... json.dump(data, f)
...
|
>>> editor = json.loadf("in.json")
>>> editor.dumpf("out.json")
Or use |
| Non unique name |
>>> data = json.loads(
... '{ "answer": 42, "answer": "spam" }')
>>> data["answer"]
'spam'
|
>>> editor = jsoncgx.loads(
... '{ "answer": 42, "answer": "spam" }')
>>> editor.root["answer"][0]
42
>>> editor.root["answer"][1]
'spam'
|
| Comments |
>>> data = json.loads(
... '{ "answer": /* eggs and */ 42 }')
Traceback (most recent call last):
...
json.decoder.JSONDecodeError: ...
|
>>> editor = jsoncgx.loads(
... '{ "answer": /* eggs and */ 42 }')
>>> editor.root.editreplacevalue(0, "spam")
>>> editor.dumps()
'{ "answer": /* eggs and */ "spam" }'
|
What syntax does this parse exactly?
ECMA-404 with the following additional lexical elements:
- regex
//[^\n]*\n, that is, the Unicode scalar sequence:- U+002F,
- U+002F,
- any amount of any scalars except U+000A,
- U+000A.
- lazy regex
/\*.*\*/, that is, the Unicode scalar sequence:- U+002F,
- U+002A,
- any amount of any scalars except the sequence U+002A U+002F
- U+002A,
- U+002F.
Those elements are considered like whitespace.
Architecture
Changelog
V1.1:
JSONNumber,JSONString,JSONBool, andJSONNullhave been replaced withJSONBuiltin, for easier integration.edit*()methods that acceptedJSONValuenow also acceptint,float,str,bool, andNone. They are automatically turned intoJSONBuiltin.
Metadata
Release files for jsoncgx 1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jsoncgx-1.1.tar.gz | 35.0 kB | Without provenance | Details for jsoncgx-1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| jsoncgx-1.1-py3-none-any.whl | Python 3 | none | any | Details for jsoncgx-1.1-py3-none-any.whl |
Total release size: 70.8 kB
Release files / jsoncgx-1.1.tar.gz
| Download URL | jsoncgx-1.1.tar.gz |
|---|---|
| Size | 35.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b3b736e6f7c4092dd5b8db2547cc47c78e2b577a436ddcff34214dc551f94a6
|
|
BLAKE2b-256 checksum How to use checksums |
9d74fd5c51ff08120e8ec8b55cf4ce57bef8774e04746524314308582f9046ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|
Release files / jsoncgx-1.1-py3-none-any.whl
| Download URL | jsoncgx-1.1-py3-none-any.whl |
|---|---|
| Size | 35.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6e14449a67d538411936cf08a726790c3d934f69f7ecc48b0a6a01a0b2cfca26
|
|
BLAKE2b-256 checksum How to use checksums |
74cf7b4915e4ce24811c4be32a6c425bfb1a4d6d70adae4aa621544c91db0453
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|
Security for jsoncgx 1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.