Nested json to python object

mandrewcito

Andrés Baamonde Lozano

Posted on January 29, 2019

Nested json to python object

Today i was creating a configuration file, in the past, i accessed configuration as a dictionary, but this time, i think about changing that. The follwing code creates dynamic attributes with the objects keys recursively.

But first, i'll show the json object:

{
  "key": "value",
  "list": [
    "a",
    "b",
    "c",
    1,
    {
      "key": 1
    }
  ],
  "object": {
    "key": {
      "key": 1
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

On the conversion we have 3 cases:

  • lists
  • dicts (new object)
  • bool, int, float and str
import json

class AppConfiguration(object):
    def __init__(self, data=None):
        if data is None:
            with open("cfg.json") as fh:
                data = json.loads(fh.read())
        else:
            data = dict(data)

        for key, val in data.items():
            setattr(self, key, self.compute_attr_value(val))

    def compute_attr_value(self, value):
        if type(value) is list:
            return [self.compute_attr_value(x) for x in value]
        elif type(value) is dict:
            return AppConfiguration(value)
        else:
            return value
Enter fullscreen mode Exit fullscreen mode

Now the key, value pairs are attributes - objects.

instance = AppConfiguration()
>>>instance.key
'value'

>>>instance.list[4].key
1

>>> instance.object.key.key
1
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
mandrewcito
Andrés Baamonde Lozano

Posted on January 29, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Nested json to python object
json Nested json to python object

January 29, 2019