You must validate your input to make sure the string you pass is not empty and is, in fact, a string. An empty string is not valid JSON.
function is_json($string) {
return !empty($string) && is_string($string) && is_array(json_decode($string, true)) && json_last_error() == 0;
}
I think in PHP it's more important to determine if the JSON object even has data, because to use the data you will need to call json_encode()
or json_decode()
. I suggest denying empty JSON objects so you aren't unnecessarily running encodes and decodes on empty data.
function has_json_data($string) {
$array = json_decode($string, true);
return !empty($string) && is_string($string) && is_array($array) && !empty($array) && json_last_error() == 0;
}