How to check if a string is a valid JSON object in PHP

You receive a data in form of string and it is supposed to be a valid JSON. So how to know whether a string you have is a valid JSON object. Here in this post I will show it with some examples to how to check whether a string is a valid json value in PHP.

Using json_encode() function

You already know that we use json_decode() to decode a JSON string. However you may not know about the json_last_error can be used to detect last json parse error in the current PHP parser. If there is any error, calling json_last_error will have a code different than JSON_ERROR_NONE’s value, that is 0.

Example:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function is_valid_json($str)
{
json_decode($str);
return json_last_error() === JSON_ERROR_NONE;
}
$json_str = '{"a":"Apple","b":"Banana"}';
if (is_valid_json($json_str)) {
echo 'String is a valid JSON';
} else {
echo 'String is not a valid JSON';
}
function is_valid_json($str) { json_decode($str); return json_last_error() === JSON_ERROR_NONE; } $json_str = '{"a":"Apple","b":"Banana"}'; if (is_valid_json($json_str)) { echo 'String is a valid JSON'; } else { echo 'String is not a valid JSON'; }
function is_valid_json($str)
{
    json_decode($str);
    return json_last_error() === JSON_ERROR_NONE;
}
 
$json_str = '{"a":"Apple","b":"Banana"}';
 
if (is_valid_json($json_str)) {
    echo 'String is a valid JSON';
} else {
    echo 'String is not a valid JSON';
}

Since JSON_ERROR_NONE constant has stored 0 as a value and if there is no error json_last_error() will return 0. can have following values, as explained here:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8
0 = JSON_ERROR_NONE 1 = JSON_ERROR_DEPTH 2 = JSON_ERROR_STATE_MISMATCH 3 = JSON_ERROR_CTRL_CHAR 4 = JSON_ERROR_SYNTAX 5 = JSON_ERROR_UTF8
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8

Leave a Reply