'Parse and return the data as JSON. If the mimetype does not indicate
JSON (:mimetype:`application/json`, see :meth:`is_json`), this returns
``None`` unless ``force`` is true. 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.'

def get_json(self, force=False, silent=False, cache=True):

    if (cache and (self._cached_json is not Ellipsis)):
        return self._cached_json
    if (not (force or self.is_json)):
        return None
    charset = self.mimetype_params.get('charset')
    try:
        data = self._get_data_for_json(cache=cache)
        rv = json.loads(data, encoding=charset)
    except ValueError as e:
        if silent:
            rv = None
        else:
            rv = self.on_json_loading_failed(e)
    if cache:
        self._cached_json = rv
    return rv
