WP_REST_Request::parse_json_params()protectedWP 4.4.0

Parses the JSON parameters.

Avoids parsing the JSON data until we need to access it.

Method of the class: WP_REST_Request{}

No Hooks.

Return

true|WP_Error. True if the JSON data was passed or no JSON data was provided, WP_Error if invalid JSON was passed.

Usage

// protected - for code of main (parent) or child class
$result = $this->parse_json_params();

Changelog

Since 4.4.0 Introduced.
Since 4.7.0 Returns error instance if value cannot be decoded.

WP_REST_Request::parse_json_params() code WP 6.4.3

protected function parse_json_params() {
	if ( $this->parsed_json ) {
		return true;
	}

	$this->parsed_json = true;

	// Check that we actually got JSON.
	if ( ! $this->is_json_content_type() ) {
		return true;
	}

	$body = $this->get_body();
	if ( empty( $body ) ) {
		return true;
	}

	$params = json_decode( $body, true );

	/*
	 * Check for a parsing error.
	 */
	if ( null === $params && JSON_ERROR_NONE !== json_last_error() ) {
		// Ensure subsequent calls receive error instance.
		$this->parsed_json = false;

		$error_data = array(
			'status'             => WP_Http::BAD_REQUEST,
			'json_error_code'    => json_last_error(),
			'json_error_message' => json_last_error_msg(),
		);

		return new WP_Error( 'rest_invalid_json', __( 'Invalid JSON body passed.' ), $error_data );
	}

	$this->params['JSON'] = $params;

	return true;
}