code: def object_from_json(self, object_type, object_json, parent=None):
          
          if not isinstance(object_json, dict):
              return object_json
          obj = self.instantiate_object(object_type, parent)
          for key, value in object_json.items():
              if key not in self.skip_attrs:
                  key, value = self._deserialize(key, obj, value)
              if isinstance(value, dict):
                  value = ProxyDict(value, dirty_callback=getattr(
                      obj, '_dirty_callback', None))
              elif isinstance(value, list):
                  value = ProxyList(value, dirty_callback=getattr(
                      obj, '_dirty_callback', None))
              setattr(obj, key, value)
          if hasattr(obj, '_clean_dirty'):
              obj._clean_dirty()
          self.api.cache.add(obj)
          return obj
docs: 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.