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 — Devuelve el último error que ocurrió
Descripción
int json_last_error
( void
)
Retorna el último error (si existe) que ocurrió en el último análisis JSON.
Parámetros
Esta función no tiene parámetros.
Valores devueltos
Devuelve un integer, el valor puede ser una de las siguientes constantes:
| Constante | Significado | Disponibilidad |
|---|---|---|
| JSON_ERROR_NONE | No ocurrió ningún error | |
| JSON_ERROR_DEPTH | Se ha excedido la profundidad máxima de la pila | |
| JSON_ERROR_CTRL_CHAR | Error del carácter de control, posiblemente se ha codificado de forma incorrecta | |
| JSON_ERROR_STATE_MISMATCH | JSON con formato incorrecto o inválido | |
| JSON_ERROR_SYNTAX | Error de sintaxis | |
| JSON_ERROR_UTF8 | Caracteres UTF-8 mal formados, posiblemente codificados de forma incorrecta | PHP 5.3.3 |
Ejemplos
Example #1 Ejemplo de json_last_error()
<?php
// Un string json válido
$json[] = '{"Organización": "Equipo de documentación PHP"}';
// Un string json no válido que causa un error de sintaxis, en este caso, se ha
// usado ' en vez de " para entrecomillar
$json[] = "{'Organización': 'Equipo de documentación PHP'}";
foreach($json as $string)
{
echo 'Decodificando: ' . $string;
json_decode($string);
switch(json_last_error())
{
case JSON_ERROR_DEPTH:
echo ' - Excedido tamaño máximo de la pila';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Encontrado carácter de control no esperado';
break;
case JSON_ERROR_SYNTAX:
echo ' - Error de sintaxis, JSON mal formado';
break;
case JSON_ERROR_NONE:
echo ' - Sin errores';
break;
}
echo PHP_EOL;
}
?>
El resultado del ejemplo sería:
Decoding: {"Organización": "Equipo de documentación PHP"} - Sin errores
Decoding: {'Organización': 'Equipo de documentación PHP'} - Error de sintaxis, JSON mal formado
lior at mytopia dot com
09-Mar-2009 01:17
