A library to manage JSONs with encoded JSON more effectively (e.g. AWS Event Bridge Events, AWS API Gateway Events)
pip install nested_jsonimport nested_json as njsonThe main API of the library consist of:
Nested(obj)- to convert any list or dictionary to a nested oneparse(str)- to parse a JSON string to a nested JSONprocess(obj)- to process/stringify any nested JSONdumps(obj),dump(obj, fp)- same as from thejsonmodule, but supports nested JSONloads(str),load(fp)- same as from thejsonmodule, but supports nested JSON
The Nested function can be used to mark a dictionary or
list as nested data, which will add a particular property to it,
marking it nested. This property was later removed during processing.
data = {
"id": "12345",
"event": {
"payload": {
"rawpayload": njson.Nested({
"key": "value",
"other": 2,
"foo": True
}),
"tags": njson.Nested([
"hello",
"world
])
}
}
}
# {
# "id": "12345",
# "event": {
# "payload": {
# "rawpayload": {
# "__nested__": True,
# "key": "value",
# "other": 2,
# "foo": True
# },
# "tags": [
# "__nested__",
# "hello",
# "world
# ]
# }
# }
# }Using the process function, the nested keys can be removed
and nested data converted to JSON string.
processed_data = njson.process(data)
# {
# "id": "12345",
# "event": {
# "payload": {
# "rawpayload": "{\"key\": \"value\", \"other\": 2, \"foo\": true}",
# "tags": "[\"hello\", \"world\"]"
# }
# }
# }The result of process can be already passed to json.dumps ,
but the njson.dumps can also be used with nested JSON data.
json_string = njson.dumps(data)
# '{"id": "12345", "event": {"payload": {"rawpayload": "{\\"key\\": \\"value\\", \\"other\\": 2, \\"foo\\": true}", "tags": "[\\"hello\\", \\"world\\"]"}}}'Nested JSON string can be parsed to nested JSON data with the loads function or the parse function
assert njson.loads(json_string) == data
assert njson.parse(processed_data) == data
assert njson.parse(json.loads(json_string)) == dataNote that both loads and dumps use the json.loads and json.dumps functions; thus they can be used with "normal" JSON as well.