def get_obj(self): path = "./" self.load_dict(path, self.loaded_json) sorted_keys = sorted(self.my_types.keys()) my_parent = {} my_obj = {} for key in sorted_keys: my_parent[key] = 0 obj = Obj(key) obj.type = self.my_types[key] if obj.type == "list": obj.nb_items = self.my_nb_items[key] if key in self.my_nb_items_min: obj.nb_items_min = self.my_nb_items_min[key] obj.nb_times_it_exists = self.my_paths[key] if key in self.my_values: obj.values = self.my_values[key] my_obj[key] = obj for key in sorted_keys: parts = key.split("[x]/") parts_len = len(parts) if parts_len > 1: path = parts[0] nb_items = my_obj[path].nb_items for i in range(1, parts_len - 1): path += "[x]/%s" % parts[i] nb_items *= my_obj[path].nb_items my_obj[key].nb_times_it_is_expected = nb_items for i in range(0, len(sorted_keys)): needle = sorted_keys[i] for key in my_parent: if len(key) > len(needle) and key.startswith(needle): my_parent[key] = i for i in range(1, len(sorted_keys)): child_index = sorted_keys[i] child = my_obj[child_index] parent_index = sorted_keys[my_parent[child_index]] parent = my_obj[parent_index] parent.add_child(child) return my_obj["./"]