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:\server\www\myserver.dev\public_html\rivrUI\public_home\index.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:nullwhen there is an errornullwhen there is no error : when the JSON string containsnullTo solve the warning problem, a solution would be to use the [`@` operator][2] *(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
$dataisnull— and, to avoid the case in whichjson_decodereturnsnullfornullin the JSON string, you could checkjson_last_error, which (quoting) :Which means you’d have to use some code like the following :