Skip to main content

Flatten nested JSON/dicts into dot-notation keys and unflatten back

Project description

philiprehberger-flatten-json

Tests PyPI version License

Flatten nested JSON/dicts into dot-notation keys and unflatten back.

Installation

pip install philiprehberger-flatten-json

Usage

from philiprehberger_flatten_json import flatten, unflatten

nested = {"a": {"b": {"c": 1}}, "d": [2, 3]}

flatten(nested)
# {"a.b.c": 1, "d.0": 2, "d.1": 3}

unflatten({"a.b.c": 1, "d.0": 2, "d.1": 3})
# {"a": {"b": {"c": 1}}, "d": [2, 3]}

# Custom separator
flatten(nested, separator="/")
# {"a/b/c": 1, "d/0": 2, "d/1": 3}

# Max depth
flatten(nested, max_depth=1)
# {"a": {"b": {"c": 1}}, "d": [2, 3]}

# Prefix
flatten(nested, prefix="root")
# {"root.a.b.c": 1, "root.d.0": 2, "root.d.1": 3}

# Keep numeric keys as dict
unflatten({"a.0": 1, "a.1": 2}, list_as_dict=True)
# {"a": {"0": 1, "1": 2}}

Roundtrip

from philiprehberger_flatten_json import flatten, unflatten

data = {"users": [{"name": "Alice", "age": 30}], "meta": {"version": 2}}

flat = flatten(data)
# {"users.0.name": "Alice", "users.0.age": 30, "meta.version": 2}

restored = unflatten(flat)
# {"users": [{"name": "Alice", "age": 30}], "meta": {"version": 2}}

API

Function Description
flatten(data, *, separator=".", max_depth=0, prefix="") Flatten nested dict/list into dot-notation keys
unflatten(data, *, separator=".", list_as_dict=False) Restore nested structure from flat dict

Parameters

flatten()

  • data — Nested dict or list
  • separator — Key separator (default ".")
  • max_depth — Max depth to flatten, 0 = unlimited
  • prefix — String to prepend to all keys

unflatten()

  • data — Flat dict with composite keys
  • separator — Key separator used during flattening
  • list_as_dict — When True, numeric keys stay as dict keys instead of converting to lists

Development

pip install -e .
python -m pytest tests/ -v

License

MIT

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

philiprehberger_flatten_json-0.2.6.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

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

philiprehberger_flatten_json-0.2.6-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_flatten_json-0.2.6.tar.gz.

File metadata

File hashes

Hashes for philiprehberger_flatten_json-0.2.6.tar.gz
Algorithm Hash digest
SHA256 5c71f860fa3733e0f949a8d3a82a351fecf2aaf79c59e63235d7a70fbddb319b
MD5 264680c2bc6849bcea0cf935f7595389
BLAKE2b-256 b99d805534fa821c56049265b8928afc3b00f664009759211be9ad933432f5fb

See more details on using hashes here.

File details

Details for the file philiprehberger_flatten_json-0.2.6-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_flatten_json-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 3a742700125bf70fc84ce2072c1be00da46bc82adcbce80a009133d67c07d3d7
MD5 97677f98ce187f09e2443705d2f52fff
BLAKE2b-256 9450ecad1e49d980c2270e6ccc00d8a3e0791f2c63eb2d4c78f345b46fd5cd49

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