이번에 소개할 함수는 JSON 데이터가 정상적인지 체크하는 함수로 , 체크 방식은 JSON 디코드시 발생되는 에러 결과값을 이용하여 체크하도록 되어있다. 

 

함수정의와 사용 방법은 아래와 같다. 

 

isjson() 함수

function isjson($string){

	json_decode($string);

	switch (json_last_error()) {

		case JSON_ERROR_NONE:
			$error = ''; // JSON is valid // No error has occurred
		break;

		case JSON_ERROR_DEPTH:
			$error = 'The maximum stack depth has been exceeded.';
		break;

		case JSON_ERROR_STATE_MISMATCH:
			$error = 'Invalid or malformed JSON.';
		break;

		case JSON_ERROR_CTRL_CHAR:
			$error = 'Control character error, possibly incorrectly encoded.';
		break;

		case JSON_ERROR_SYNTAX:
			$error = 'Syntax error, malformed JSON.';
		break;

		// PHP >= 5.3.3
		case JSON_ERROR_UTF8:
			$error = 'Malformed UTF-8 characters, possibly incorrectly encoded.';
		break;

		// PHP >= 5.5.0
		case JSON_ERROR_RECURSION:
			$error = 'One or more recursive references in the value to be encoded.';
		break;

		// PHP >= 5.5.0
		case JSON_ERROR_INF_OR_NAN:
			$error = 'One or more NAN or INF values in the value to be encoded.';

		break;

		case JSON_ERROR_UNSUPPORTED_TYPE:
			$error = 'A value of a type that cannot be encoded was given.';

		break;

		default:
			$error = 'Unknown JSON error occured.';
		break;

	}

	if($error !== ''){ return false; }
	return true;
}

 

예제

$jsonstr1 = '{dkdk:ffmm,}';
$jsonstr2 = json_encode(array('rst'=>'success'));

$result1 = isjson($jsonstr1); 
var_dump($result1); // return false;

$result2 = isjson($jsonstr2); 
var_dump($result1); // return true;