Checks that the request json is well-formed.

        :param msg: The request's json data
        :type msg: dict[str, object]

def _check_request(self, msg):
        """Checks that the request json is well-formed.

        :param msg: The request's json data
        :type msg: dict[str, object]
        """
        if "jsonrpc" not in msg:
            raise InvalidRequestError("'\"jsonrpc\": \"2.0\"' must be included.")
        if msg["jsonrpc"] != "2.0":
            raise InvalidRequestError("'jsonrpc' must be exactly the string '2.0', but it was '{}'."
                                      .format(msg["jsonrpc"]))
        if "method" not in msg:
            raise InvalidRequestError("No method specified.")
        if "id" in msg:
            if msg["id"] is None:
                raise InvalidRequestError("typedjsonrpc does not allow id to be None.")
            if isinstance(msg["id"], float):
                raise InvalidRequestError("typedjsonrpc does not support float ids.")
            if not isinstance(msg["id"], (six.string_types, six.integer_types)):
                raise InvalidRequestError("id must be a string or integer; '{}' is of type {}."
                                          .format(msg["id"], type(msg["id"])))
        if msg["method"] not in self._name_to_method_info:
            raise MethodNotFoundError("Could not find method '{}'.".format(msg["method"]))