nested-json

A library to manage JSONs with encoded JSON more effectively (e.g. AWS Event Bridge Events, AWS API Gateway Events)


Keywords
hacktoberfest, json, python
License
MIT
Install
pip install nested-json==1.0.1

Documentation

nested-json

PyPI PyPI - Downloads GitHub release (latest by date)

A library to manage JSONs with encoded JSON more effectively (e.g. AWS Event Bridge Events, AWS API Gateway Events)

Install

pip install nested_json

Usage

import nested_json as njson

The main API of the library consist of:

  • Nested(obj) - to convert any list or dictionary to a nested one
  • parse(str) - to parse a JSON string to a nested JSON
  • process(obj) - to process/stringify any nested JSON
  • dumps(obj), dump(obj, fp) - same as from the json module, but supports nested JSON
  • loads(str), load(fp) - same as from the json module, but supports nested JSON

Marking dict / list as nested

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
#       ]
#     }
#   }
# }

Processing nested JSON

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\"]"
#     }
#   }
# }

Converting to JSON string

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\\"]"}}}'

Parsing JSON string

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)) == data

Compatibility

Note that both loads and dumps use the json.loads and json.dumps functions; thus they can be used with "normal" JSON as well.