Standalone JsonObject helper utilities
Project description
PyJsonObject
PyJsonObject is a Python library for reading and updating nested JSON values via slash-separated key paths.
Features
- Read nested values with paths like
user/profile/name - Read/write array values with bracket syntax, e.g.
items/[0]/id - Special array tokens:
[^]= first element[$]= last element
- Safe reads with
default=... - Optional
force=Truewrites that create/reshape intermediate structures - File helpers:
from_file(...),to_file(...)
Installation
Install from source (editable)
python3 -m pip install -e .
Build distribution artifacts
python3 -m pip install build
python3 -m build
Requirements
- Python
>=3.12 - Runtime dependencies:
kingkybel-pyflashlogger>=2.5.0kingkybel-pyfundamentals>=0.4.6
Path syntax
- Path separator:
/ - Object key segment:
config/theme - Array index segment:
users/[0]/name - Supported array selectors:
[0],[1], ...[^],[$]
Quick usage
Basic get/set
from pyjsonobject import JsonObject
obj = JsonObject(json_str='{"user": {"name": "Ada", "age": 36}}')
obj.set("user/name", "Ada Lovelace", force=False)
print(obj.get("user/name"))
Read with default
from pyjsonobject import JsonObject
obj = JsonObject(json_obj={"user": {"name": "Ada"}})
city = obj.get("user/city", default="unknown")
print(city) # unknown
Force-create nested path
from pyjsonobject import JsonObject
obj = JsonObject(json_str="{}")
obj.set("a/[0]/name", "node-0", force=True)
print(obj.get("a/[0]/name"))
Array prepend/append tokens
from pyjsonobject import JsonObject
arr = JsonObject(json_str="[]")
arr.set("[$]", "last", force=True) # append
arr.set("[^]", "first", force=True) # prepend
print(arr.get("[^]")) # first
print(arr.get("[$]")) # last
Work with files
from pyjsonobject import JsonObject
obj = JsonObject(filename="input.json")
obj.set("meta/version", 2, force=True)
obj.to_file("output.json", indent=2)
API overview
JsonObject(json_str=None, filename=None, json_obj=None)get(keys, default=None)set(keys, value, force=False, dryrun=False)update(keys, mapping, force=False, deep=False, dryrun=False)delete(keys, silent=False, dryrun=False)key_exists(keys)get_many(paths, default=None)from_string(json_str)/from_object(obj)/from_file(filename)to_str(indent=2)/to_file(filename, indent=4, dryrun=False)get_json()/to_dict()/copy()JsonObject.assert_json_files_valid(paths)
Behavior notes
force=False (default)
- The path must already exist and container types must match.
- Leaf updates only succeed when the existing value type matches the new value type.
- Type mismatches raise
JsonValueMismatch.
force=True
- Missing path segments are created as needed.
- Existing incompatible intermediate containers may be reshaped to satisfy the target path.
[^]and[$]can be used to prepend/append when writing to arrays.
update(...) merge behavior
update(..., deep=False)performs a shallow dict update at the target path.update(..., deep=True)recursively merges nested dictionaries.force=Trueallows creation/replacement of the target path with a dict before merge.
Public typing aliases
The implementation provides explicit aliases in pyjsonobject.types:
JSONScalar = bool | int | float | strJSONValue = JSONScalar | list | dictJSONObjectContainer = list | dict
Development
Run tests:
python3 -m pytest -q
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kingkybel_pyjsonobject-0.2.1.tar.gz.
File metadata
- Download URL: kingkybel_pyjsonobject-0.2.1.tar.gz
- Upload date:
- Size: 27.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41355e33b908574a2a36a4bf68bde36cfac790d563c3c77c74ac98f25c3ecf85
|
|
| MD5 |
b466f057100ceebdfd16647726751f07
|
|
| BLAKE2b-256 |
6da68c46790940a3d5643827a971e05fb5c1f0c2087c4b61b3c45fc73235a7be
|
File details
Details for the file kingkybel_pyjsonobject-0.2.1-py3-none-any.whl.
File metadata
- Download URL: kingkybel_pyjsonobject-0.2.1-py3-none-any.whl
- Upload date:
- Size: 24.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64acc84b8f6f0e7c47b6febd0b731121401eb4ce2dec8cf2404d29cb07285191
|
|
| MD5 |
05cfcadb61b7caa702d3ce8bf46b98b1
|
|
| BLAKE2b-256 |
fa6a99d9bac8135698f0e883656345e05cb366feb7ce21afc88ef0330f8402ae
|