Spaces:
Running
on
Zero
Running
on
Zero
| 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) | |