class JsonObject: def __init__(self, initial_dict=None): """ Initialize the JsonObject with an optional initial dictionary. :param initial_dict: A dictionary to initialize the JsonObject. """ # If no initial dictionary is provided, use an empty dictionary self._dict_obj = initial_dict if initial_dict is not None else {} if self._dict_obj is self: raise ValueError("JsonObject cannot be initialized with itself") def __getattr__(self, name): """ Get an attribute value. If the attribute does not exist, look it up in the internal dictionary. :param name: The name of the attribute. :return: The value of the attribute. :raises AttributeError: If the attribute is not found in the dictionary. """ try: return self._dict_obj[name] except KeyError: return None def __setattr__(self, name, value): """ Set an attribute value. If the attribute name is '_dict_obj', set it directly as an instance attribute. Otherwise, store it in the internal dictionary. :param name: The name of the attribute. :param value: The value to set. """ if name == "_dict_obj": super().__setattr__(name, value) else: self._dict_obj[name] = value def __delattr__(self, name): """ Delete an attribute. If the attribute does not exist, look it up in the internal dictionary and remove it. :param name: The name of the attribute. :raises AttributeError: If the attribute is not found in the dictionary. """ try: del self._dict_obj[name] except KeyError: return def __getitem__(self, key): """ Get an item value from the internal dictionary. :param key: The key of the item. :return: The value of the item. :raises KeyError: If the key is not found in the dictionary. """ if key not in self._dict_obj: return None return self._dict_obj[key] def __setitem__(self, key, value): """ Set an item value in the internal dictionary. :param key: The key of the item. :param value: The value to set. """ self._dict_obj[key] = value def __delitem__(self, key): """ Delete an item from the internal dictionary. :param key: The key of the item. :raises KeyError: If the key is not found in the dictionary. """ del self._dict_obj[key] def to_dict(self): """ Convert the JsonObject back to a regular dictionary. :return: The internal dictionary. """ return self._dict_obj def has_key(self, key): """ Check if the key exists in the internal dictionary. :param key: The key to check. :return: True if the key exists, False otherwise. """ return key in self._dict_obj def keys(self): """ Get a list of keys in the internal dictionary. :return: A list of keys. """ return self._dict_obj.keys() def values(self): """ Get a list of values in the internal dictionary. :return: A list of values. """ return self._dict_obj.values() def clone(self): """ Clone the JsonObject. :return: A new JsonObject with the same internal dictionary. """ return JsonObject(self._dict_obj.copy()) def merge(self, other): """ Merge the internal dictionary with another dictionary. :param other: The other dictionary to merge. """ self._dict_obj.update(other)