def object_from_json(self, object_type, object_json, parent=None):
if not isinstance(object_json, dict):<EOL><INDENT>return object_json<EOL><DEDENT>obj = self.instantiate_object(object_type, parent)<EOL>for key, value in object_json.items():<EOL><INDENT>if key not in self.skip_attrs:<EOL><INDENT>key, value = self._deserialize(key, obj, value)<EOL><DEDENT>if isinstance(value, dict):<EOL><INDENT>value = ProxyDict(value, dirty_callback=getattr(<EOL>obj, '<STR_LIT>', None))<EOL><DEDENT>elif isinstance(value, list):<EOL><INDENT>value = ProxyList(value, dirty_callback=getattr(<EOL>obj, '<STR_LIT>', None))<EOL><DEDENT>setattr(obj, key, value)<EOL><DEDENT>if hasattr(obj, '<STR_LIT>'):<EOL><INDENT>obj._clean_dirty()<EOL><DEDENT>self.api.cache.add(obj)<EOL>return obj<EOL>
Given a blob of JSON representing a Zenpy object, recursively deserialize it and
 any nested objects it contains. This method also adds the deserialized object
 to the relevant cache if applicable.