flatten_json
Flattens JSON objects in Python. flatten_json flattens the hierarchy in your object which can be useful if you want to force your objects into a table.
Installation
pip install flatten_json
flatten
Usage
Let's say you have the following object:
dic = {
"a": 1,
"b": 2,
"c": [{"d": [2, 3, 4], "e": [{"f": 1, "g": 2}]}]
}
which you want to flatten. Just apply flatten:
from flatten_json import flatten
flatten(dic)
Results:
{'a': 1,
'b': 2,
'c_0_d_0': 2,
'c_0_d_1': 3,
'c_0_d_2': 4,
'c_0_e_0_f': 1,
'c_0_e_0_g': 2}
Usage with Pandas
For the following object:
dic = [
{"a": 1, "b": 2, "c": {"d": 3, "e": 4}},
{"a": 0.5, "c": {"d": 3.2}},
{"a": 0.8, "b": 1.8},
]
We can apply flatten to each element in the array and then use pandas to capture the output as a dataframe:
dic_flattened = [flatten(d) for d in dic]
which creates an array of flattened objects:
[{'a': 1, 'b': 2, 'c_d': 3, 'c_e': 4},
{'a': 0.5, 'c_d': 3.2},
{'a': 0.8, 'b': 1.8}]
Finally you can use pd.DataFrame to capture the flattened array:
import pandas as pd
df = pd.DataFrame(dic_flattened)
The final result as a Pandas dataframe:
a b c_d c_e
0 1 2 3 4
1 0.5 NaN 3.2 NaN
2 0.8 1.8 NaN NaN
Custom separator
By default _ is used to separate nested element. You can change this by passing the desired character:
flatten({"a": [1]}, '|')
returns:
{'a|0': 1}
Ignore root keys
By default flatten goes through all the keys in the object. If you are not interested in output from a set of keys you can pass this set as an argument to root_keys_to_ignore:
dic = {
'a': {'a': [1, 2, 3]},
'b': {'b': 'foo', 'c': 'bar'},
'c': {'c': [{'foo': 5, 'bar': 6, 'baz': [1, 2, 3]}]}
}
flatten(dic, root_keys_to_ignore={'b', 'c'})
returns:
{
'a_a_0': 1,
'a_a_1': 2,
'a_a_2': 3
}
This feature can prevent unnecessary processing which is a concern with deeply nested objects.
unflatten
Reverses the flattening process. Example usage:
from flatten_json import unflatten
dic = {
'a': 1,
'b_a': 2,
'b_b': 3,
'c_a_b': 5
}
unflatten(dic)
returns:
{
'a': 1,
'b': {'a': 2, 'b': 3},
'c': {'a': {'b': 5}}
}
Unflatten with lists
flatten encodes key for list values with integer indices which makes it ambiguous for reversing the process. Consider this flattened dictionary:
a = {'a': 1, 'b_0': 5}
Both {'a': 1, 'b': [5]} and {'a': 1, 'b': {0: 5}} are legitimate answers.
Calling unflatten_list the dictionary is first unflattened and then in a post-processing step the function looks for a list pattern (zero-indexed consecutive integer keys) and transforms the matched values into a list.
Here's an example:
from flatten_json import unflatten_list
dic = {
'a': 1,
'b_0': 1,
'b_1': 2,
'c_a': 'a',
'c_b_0': 1,
'c_b_1': 2,
'c_b_2': 3
}
unflatten_list(dic)
returns:
{
'a': 1,
'b': [1, 2],
'c': {'a': 'a', 'b': [1, 2, 3]}
}
Command line invocation
>>> echo '{"a": {"b": 1}}' | flatten_json
{"a_b": 1}
>>> echo '{"a": {"b": 1}}' > test.json
>>> cat test.json | flatten_json
{"a_b": 1}
Metadata
Release files for flatten-json 0.1.14
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 |
|---|---|---|---|---|
| flatten_json-0.1.14.tar.gz | 7.8 kB | Without provenance | Details for flatten_json-0.1.14.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| flatten_json-0.1.14-py3-none-any.whl | Python 3 | none | any | Details for flatten_json-0.1.14-py3-none-any.whl |
Total release size: 15.8 kB
Release files / flatten_json-0.1.14.tar.gz
| Download URL | flatten_json-0.1.14.tar.gz |
|---|---|
| Size | 7.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4008b1bd81743e6fcdc29ddbb640f5c1589376116e0c8f36cb4a0003d41fe102
|
|
BLAKE2b-256 checksum How to use checksums |
0f14e9b5e4a8dd7edccc9d0791c4ed2180e50b00ab4c19b07081308814dd4e68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.7
|
Release files / flatten_json-0.1.14-py3-none-any.whl
| Download URL | flatten_json-0.1.14-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
75e455dbbb5be2431546024039cac094a8ed1dfedcf36ab1e7c9d01459fa410c
|
|
BLAKE2b-256 checksum How to use checksums |
63b599f20a19b839e04fffab924be192681b797b40bcf83abdfa508371c6273c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.9.7
|
Security for flatten-json 0.1.14
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.