WP_REST_Request::parse_json_params()

Parses the JSON parameters.


Description Description

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


Return Return

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


Top ↑

Source Source

File: wp-includes/rest-api/class-wp-rest-request.php

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

		$this->parsed_json = true;

		// Check that we actually got JSON.
		$content_type = $this->get_content_type();

		if ( empty( $content_type ) || 'application/json' !== $content_type['value'] ) {
			return true;
		}

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

		$params = json_decode( $body, true );

		/*
		 * Check for a parsing error.
		 *
		 * Note that due to WP's JSON compatibility functions, json_last_error
		 * might not be defined: https://core.trac.wordpress.org/ticket/27799
		 */
		if ( null === $params && ( ! function_exists( 'json_last_error' ) || JSON_ERROR_NONE !== json_last_error() ) ) {
			// Ensure subsequent calls receive error instance.
			$this->parsed_json = false;

			$error_data = array(
				'status' => WP_Http::BAD_REQUEST,
			);
			if ( function_exists( 'json_last_error' ) ) {
				$error_data['json_error_code']    = json_last_error();
				$error_data['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;
	}

Top ↑

Changelog Changelog

Changelog
Version Description
4.7.0 Returns error instance if value cannot be decoded.
4.4.0 Introduced.


Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.