Skip to main content

Standalone JsonObject helper utilities

Project description

PyJsonObject banner

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=True writes 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.0
    • kingkybel-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=True allows 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 | str
  • JSONValue = JSONScalar | list | dict
  • JSONObjectContainer = list | dict

Development

Run tests:

python3 -m pytest -q

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kingkybel_pyjsonobject-0.2.1.tar.gz (27.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kingkybel_pyjsonobject-0.2.1-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

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

Hashes for kingkybel_pyjsonobject-0.2.1.tar.gz
Algorithm Hash digest
SHA256 41355e33b908574a2a36a4bf68bde36cfac790d563c3c77c74ac98f25c3ecf85
MD5 b466f057100ceebdfd16647726751f07
BLAKE2b-256 6da68c46790940a3d5643827a971e05fb5c1f0c2087c4b61b3c45fc73235a7be

See more details on using hashes here.

File details

Details for the file kingkybel_pyjsonobject-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for kingkybel_pyjsonobject-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 64acc84b8f6f0e7c47b6febd0b731121401eb4ce2dec8cf2404d29cb07285191
MD5 05cfcadb61b7caa702d3ce8bf46b98b1
BLAKE2b-256 fa6a99d9bac8135698f0e883656345e05cb366feb7ce21afc88ef0330f8402ae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page