code: def get_json(self, force=False, silent=False, cache=True):
          
          if cache and self._cached_json[silent] is not Ellipsis:
              return self._cached_json[silent]
  
          if not (force or self.is_json):
              return None
  
          data = self._get_data_for_json(cache=cache)
  
          try:
              rv = self.json_module.loads(data)
          except ValueError as e:
              if silent:
                  rv = None
  
                  if cache:
                      normal_rv, _ = self._cached_json
                      self._cached_json = (normal_rv, rv)
              else:
                  rv = self.on_json_loading_failed(e)
  
                  if cache:
                      _, silent_rv = self._cached_json
                      self._cached_json = (rv, silent_rv)
          else:
              if cache:
                  self._cached_json = (rv, rv)
  
          return rv
docs: Parse :attr:`data` as JSON.
  
          If the mimetype does not indicate JSON
          (:mimetype:`application/json`, see :meth:`is_json`), this
          returns ``None``.
  
          If parsing fails, :meth:`on_json_loading_failed` is called and
          its return value is used as the return value.
  
          :param force: Ignore the mimetype and always try to parse JSON.
          :param silent: Silence parsing errors and return ``None``
              instead.
          :param cache: Store the parsed JSON to return for subsequent
              calls.