Skip to main content

A specialized dictionary unpacking tool that allows you to expand a dictionary by unpacking internal arrays or list values, generating a list of dictionaries. Each dictionary in the list will contain a copy of all key-value pairs. This tool is designed to split arrays within JSON data into multiple records, making it easier to insert into a database.

Project description

What does this tool do?

A specialized dictionary splitting tool that allows you to unpack a dictionary from its internal array or list values and generate a list. Each list will have a complete copy of all key-value pairs. It's somewhat similar to a matrix. This tool is designed to split arrays within JSON data into multiple records, making it easier to insert into a database.

Example

for list

data = {
    "id": 1, 
    "name": "John", 
    "subject": [{"id": 22, "des": "math"}, {"id": 23, "des": "art"}]
}

Allow overriding parent's same-named key-value pairs by default.

unpack(data, ["subject"])

Output:
[{'id': 22, 'name': 'John', 'des': 'math'},
{'id': 23, 'name': 'John', 'des': 'art'}]

Forbid overriding parent's same-named key-value pairs.

unpack(data, ["subject"], ".")

Output:
[{'id': 1, 'name': 'John', 'subject.id': 1, 'subject.name': 'John'},
{'id': 1, 'name': 'John', 'subject.id': 1, 'subject.name': 'John'}]

An empty list will be returned when a non-existent path is passed in.

unpack(data, ["subject", "name"], ".")

Output:
[]

For double-layer or multi-layer nesting

data = {
    "id": 1,
    "name": "John",
    "subject": [{
        "subjectid": 22,
        "des": [{"key": "a"},
                {"key": "b"}]
    }, {"subjectid": 23,
        "des": [{"key": "a"},
                {"key": "e"}]
        }]
}
unpack(data, ["subject"])

Output:
[
{'id': 1, 'name': 'John', 'subjectid': 22, 'des': [{'key': 'a'}, {'key': 'b'}]}, 
{'id': 1, 'name': 'John', 'subjectid': 23, 'des': [{'key': 'a'}, {'key': 'e'}]}
]
unpack(data, ["subject", "des"])

Output:
[
{'id': 1, 'name': 'John', 'subjectid': 22, 'key': 'a'}, 
{'id': 1, 'name': 'John', 'subjectid': 22, 'key': 'b'}, 
{'id': 1, 'name': 'John', 'subjectid': 23, 'key': 'a'}, 
{'id': 1, 'name': 'John', 'subjectid': 23, 'key': 'e'}
]

If it is empty, override the same-named key-value pairs in the parent. If it is not empty, use the provided string as the delimiter to connect with the parent key.

unpack(data, ["subject", "des"], "_")

Output:
[
{'id': 1, 'name': 'John', 'subject_subjectid': 22, 'subject_des_key': 'a'},
{'id': 1, 'name': 'John', 'subject_subjectid': 22, 'subject_des_key': 'b'},
{'id': 1, 'name': 'John', 'subject_subjectid': 23, 'subject_des_key': 'a'},
{'id': 1, 'name': 'John', 'subject_subjectid': 23, 'subject_des_key': 'e'}
]

for array

unpack(
dictionary = {"id": 1, "name": "John", "grades": [85, 92, 78]},
index      = ["grades"],
delimiter  = None
)

Array-type fields only allow single-level unpacking.

Output:
[
{"id": 1, "name": "John", "grade": 85},
{"id": 1, "name": "John", "grade": 92},
{"id": 1, "name": "John", "grade": 78}
]

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

dict_unpack-0.0.2.tar.gz (2.7 kB view hashes)

Uploaded Source

Built Distribution

dict_unpack-0.0.2-py3-none-any.whl (2.9 kB view hashes)

Uploaded Python 3

Supported by

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