I'm trying handle bad json data when parsed through json_decode(). I'm using the following script:
if(!json_decode($_POST)) {
echo "bad json data!";
exit;
}
If $_POST equals:
'{ bar: "baz" }'
Then json_decode handles the error fine and spits out "bad json data!"; However, if I set $_POST to something like "invalid data", it gives me:
Warning: json_decode() expects parameter 1 to be string, array given in C:serverwwwmyserver.devpublic_htmlrivrUIpublic_homeindex.php on line 6
bad json data!
Do I need to write a custom script to detect valid json data, or is there some other nifty way to detect this?
Here are a couple of things about
json_decode
:null
when there is an errornull
when there is no error : when the JSON string containsnull
To solve the warning problem, a solution would be to use the
@
operator (I don't often recommend using it, as it makes debuging a lot more harder... But here, there is not much of a choice) :You'd then have to test if
$data
isnull
-- and, to avoid the case in whichjson_decode
returnsnull
fornull
in the JSON string, you could checkjson_last_error
, which (quoting) :Which means you'd have to use some code like the following :