For those of you who prefer a more object oriented approach (as I do), here is a fairly simple wrapper that handles errors using exceptions:
<?php
class JSON
{
public static function Encode($obj)
{
return json_encode($obj);
}
public static function Decode($json, $toAssoc = false)
{
$result = json_decode($json, $toAssoc);
switch(json_last_error())
{
case JSON_ERROR_DEPTH:
$error = ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_CTRL_CHAR:
$error = ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
$error = ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_NONE:
default:
$error = '';
}
if (!empty($error))
throw new Exception('JSON Error: '.$error);
return $result;
}
}
?>
json_last_error
(PHP 5 >= 5.3.0)
json_last_error — Returns the last error occurred
Descrição
int json_last_error
( void
)
Returns the last error (if any) occurred by last JSON parsing.
Parâmetros
Esta função não contém parâmetros.
Valor Retornado
Returns an integer, the value can be one of the following constants:
| Constant | Meaning |
|---|---|
| JSON_ERROR_NONE | No error has occurred |
| JSON_ERROR_DEPTH | The maximum stack depth has been exceeded |
| JSON_ERROR_CTRL_CHAR | Control character error, possibly incorrectly encoded |
| JSON_ERROR_SYNTAX | Syntax error |
Exemplos
Exemplo #1 json_last_error() example
<?php
// A valid json string
$json[] = '{"Organization": "PHP Documentation Team"}';
// An invalid json string which will cause an syntax
// error, in this case we used ' instead of " for quotation
$json[] = "{'Organization': 'PHP Documentation Team'}";
foreach($json as $string)
{
echo 'Decoding: ' . $string;
json_decode($string);
switch(json_last_error())
{
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
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_NONE:
echo ' - No errors';
break;
}
echo PHP_EOL;
}
?>
O exemplo acima irá imprimir:
Decoding: {"Organization": "PHP Documentation Team"} - No errors
Decoding: {'Organization': 'PHP Documentation Team'} - Syntax error, malformed JSON
json_last_error
lior at mytopia dot com
09-Mar-2009 11:17
09-Mar-2009 11:17
