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 :
null when there is an errornull when there is no error : when the JSON string contains null 
 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) :
$_POST = array(     'bad data' ); $data = @json_decode($_POST);   You'd then have to test if $data is null -- and, to avoid the case in which json_decode returns null for null in the JSON string, you could check json_last_error, which (quoting) :
Returns the last error (if any) occurred by last JSON parsing.
 Which means you'd have to use some code like the following :
if ($data === null     && json_last_error() !== JSON_ERROR_NONE) {     echo "incorrect data"; } 
                        You can also use json_last_error : http://php.net/manual/en/function.json-last-error.php
which as documentation says :
Returns the last error (if any) occurred during the last JSON encoding/decoding.
here is an example
json_decode($string);  switch (json_last_error()) {     case JSON_ERROR_NONE:         echo ' - No errors';     break;     case JSON_ERROR_DEPTH:         echo ' - Maximum stack depth exceeded';     break;     case JSON_ERROR_STATE_MISMATCH:         echo ' - Underflow or the modes mismatch';     break;     case JSON_ERROR_CTRL_CHAR:         echo ' - Unexpected control character found';     break;     case JSON_ERROR_SYNTAX:         echo ' - Syntax error, malformed JSON';     break;     case JSON_ERROR_UTF8:         echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';     break;     default:         echo ' - Unknown error';     break; } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With