Skip to main content

A Python implementation of JSON Pointer and JSON Patch

Project description

pyjsonpatch

Unit Tests CI Publish CI GitHub License PyPI - Python Version

About

A Python implementation of JSON Pointer (RFC 6902) and JSON Patch (RFC 6902). Primarily, the package can do the following to Python object(s) representing JSON(s):

  • apply_patch to modify an object with a JSON patch
  • generate_patch to generate a JSON Patch from two objects
  • get_by_ptr to retrieve a value from object using a JSON pointer

Table of Contents

Installation

Python 3.8 or higher is required. You can install the library with:

# Linux/macOS
python3 -m pip install -U pyjsonpatch

# Windows
py -3 -m pip install -U pyjsonpatch

Development

Install the dev requirements with:

# Linux/macOS
python3 -m pip install -r requirements-dev.txt

# Windows
py -3 -m pip install -r requirements-dev.txt

Linting and Formatting

Run the Ruff linter and formatter with:

# Lint
ruff check --fix

# Format
ruff format

Testing

Run tests with:

# Linux/macOS
python3 -m unittest discover tests

# Windows
py -3 -m unittest discover tests

Building and Releasing

Build with:

# Linux/macOS
python3 -m build

# Windows
py -3 -m build

Commit messages should follow Conventional Commits and version numbers follow Semantic Versioning. Releases require a version bump in pyproject.toml alongside a push to main with that version as a tag.

Examples

get_by_ptr

from pyjsonpatch import get_by_ptr


source = {"": 1, "foo": [2, 3]}

print(get_by_ptr(source, "").obj)
# {"": 1, "foo": [2, 3]}
print(get_by_ptr(source, "/").obj)
# 1
print(get_by_ptr(source, "/foo").obj)
# [2, 3]
print(get_by_ptr(source, "/foo/0").obj)
# 2

apply_patch

from pyjsonpatch import apply_patch


source = {"": 1, "foo": [2, 3]}
patch = [
  {"op": "add", "path": "/hello", "value": "world"},
  {"op": "add", "path": "/foo/1", "value": 4},
  {"op": "add", "path": "/foo/-", "value": 5},
  {"op": "remove", "path": "/"},
]
res = apply_patch(source, patch)

print(res.obj)
# {"foo": [2, 4, 3, 5], "hello": "world"}
print(res.obj is source)
# True
#  - source was mutated
print(res.removed)
# [None, None, None, 1]
#  - Only the 4th operation removes something

generate_patch

from pyjsonpatch import generate_patch


source = {"": 1, "foo": [2, 3]}
target = {"foo": [2, 4], "hello": "world"}
print(generate_patch(source, target))
# [
#   {"op": "remove": "path": "/"},
#   {"op": "replace": "path": "/foo/1", "value": 4},
#   {"op": "add": "path": "/hello", "value": "world"},
# ]

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

pyjsonpatch-0.1.3.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

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

pyjsonpatch-0.1.3-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file pyjsonpatch-0.1.3.tar.gz.

File metadata

  • Download URL: pyjsonpatch-0.1.3.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyjsonpatch-0.1.3.tar.gz
Algorithm Hash digest
SHA256 0273fe6984fbfe7628d58f86e63c602c0a816e7c112a479970f3828928c573e1
MD5 462662297012e6c801c8e27a28cbd048
BLAKE2b-256 d5f773c66854ceb178ecc8d87003c0a384b2d8e7665aa542a210d32affe917d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjsonpatch-0.1.3.tar.gz:

Publisher: publish.yml on deephaven/pyjsonpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyjsonpatch-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: pyjsonpatch-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 14.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyjsonpatch-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 23de20db16308db5df0fb70f5beaf9e86af74f7b1dacdf89580a74f2d080b54d
MD5 35e525fbf35689560bec98a02602a8e7
BLAKE2b-256 946b47bd557d73d81731557f37ff5a95fdcca72371723d556a19a133c07167e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyjsonpatch-0.1.3-py3-none-any.whl:

Publisher: publish.yml on deephaven/pyjsonpatch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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