Saltar al contenido

¿Detectar datos json incorrectos en PHP json_decode ()?

Solución:

Aquí hay un par de cosas sobre json_decode :

  • devuelve los datos, o null cuando hay un error
  • también puede volver null cuando no hay error: cuando la cadena JSON contiene null
  • genera una advertencia donde hay una advertencia, una advertencia que desea hacer desaparecer.

Para resolver el problema de advertencia, una solución sería utilizar el @ operador (No recomiendo usarlo a menudo, ya que hace que la depuración sea mucho más difícil … Pero aquí, no hay muchas opciones) :

$_POST = array(
    'bad data'
);
$data = @json_decode($_POST);

Entonces tendrías que probar si $data es null – y, para evitar el caso en el que json_decode devoluciones null por null en la cadena JSON, puede verificar json_last_error, cuales (citando) :

Devuelve el último error (si lo hay) ocurrido por el último análisis JSON.

Lo que significa que tendrías que usar un código como el siguiente:

if ($data === null
    && json_last_error() !== JSON_ERROR_NONE) {
    echo "incorrect data";
}

También puede usar json_last_error: http://php.net/manual/en/function.json-last-error.php

que como dice la documentación:

Devuelve el último error (si lo hubiera) ocurrido durante la última codificación / decodificación JSON.

Aquí hay un ejemplo

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;
}

Desde PHP 7.3, la función json_decode aceptará una nueva opción JSON_THROW_ON_ERROR que permitirá que json_decode arroje una excepción en lugar de devolver un valor nulo en caso de error.


Ejemplo:

try {  
  json_decode("{", false, 512, JSON_THROW_ON_ERROR);  
}  
catch (JsonException $exception) {  
  echo $exception->getMessage(); // displays "Syntax error"  
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *