json_last_error
PHP Manual
PHP Manual»Funciones de JSON»json_last_error

json_last_error

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

json_last_error — Devuelve el último error JSON

Descripción

function json_last_error(): int

Devuelve el último error, si ha ocurrido, durante la última operación de validación/codificación/decodificación JSON, que no haya especificado JSON_THROW_ON_ERROR.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Devuelve un entero, cuyo valor puede ser una de las siguientes constantes:

JSON_ERROR_NONE

No ha ocurrido ningún error

JSON_ERROR_DEPTH

Se ha excedido la profundidad máxima de la pila

JSON_ERROR_STATE_MISMATCH

JSON inválido o mal formado

JSON_ERROR_CTRL_CHAR

Error de carácter de control, posiblemente mal codificado

JSON_ERROR_SYNTAX

Error de sintaxis

JSON_ERROR_UTF8

Caracteres UTF-8 mal formados, posiblemente mal codificados

JSON_ERROR_RECURSION

Una o más referencias recursivas en el valor a codificar

JSON_ERROR_INF_OR_NAN

Uno o más valores NAN o INF en el valor a codificar

JSON_ERROR_UNSUPPORTED_TYPE

Se ha proporcionado un valor de un tipo que no puede ser codificado

JSON_ERROR_INVALID_PROPERTY_NAME

Se ha proporcionado un nombre de propiedad que no puede ser codificado

JSON_ERROR_UTF16

Caracteres UTF-16 mal formados, posiblemente mal codificados

JSON_ERROR_NON_BACKED_ENUM

El valor contiene un enum no respaldado que no se puede serializar

Historial de cambios

Versión Descripción
8.1.0 Se añadió JSON_ERROR_NON_BACKED_ENUM.

Ejemplos

Ejemplo #1 Ejemplo con json_last_error()

<?php
// Una cadena JSON válida
$json[] = '{"Organización": "Equipo de Documentación de PHP"}';

// Una cadena json inválida que va a generar un error de sintaxis,
// aquí, uso de ' en lugar de "
$json[] = "{'Organización': 'Equipo de Documentación de PHP'}";

foreach ($json as $string) {
    echo 'Decodificación: ' . $string;
    json_decode($string);

    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - Sin errores';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Profundidad máxima alcanzada';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Inadecuación de modos o underflow';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Error durante el control de caracteres';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Error de sintaxis; JSON malformado';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Caracteres UTF-8 malformados, probablemente un error de codificación';
        break;
        default:
            echo ' - Error desconocido';
        break;
    }

    echo PHP_EOL;
}
?>

El ejemplo anterior mostrará:

Decodificación: {"Organización": "Equipo de Documentación de PHP"} - Sin errores
Decodificación: {'Organización': 'Equipo de Documentación de PHP'} - Error de sintaxis; JSON malformado

Ejemplo #2 json_last_error() con json_encode()

<?php
// Una secuencia UTF8 inválida
$text = "\xB1\x31";

$json  = json_encode($text);
$error = json_last_error();

var_dump($json, $error === JSON_ERROR_UTF8);
?>

El ejemplo anterior mostrará:

string(4) "null"
bool(true)

Ejemplo #3 json_last_error() y JSON_THROW_ON_ERROR

<?php
// Una secuencia UTF8 inválida que causa JSON_ERROR_UTF8
json_encode("\xB1\x31");

// Esto no produce un error JSON
json_encode('okay', JSON_THROW_ON_ERROR);

// El estado de error global no ha sido modificado por el json_encode() anterior
var_dump(json_last_error() === JSON_ERROR_UTF8);
?>

El ejemplo anterior mostrará:

bool(true)

Véase también

  • json_last_error_msg() - Devuelve el mensaje del último error ocurrido durante la llamada a la función json_validate(), json_encode() o json_decode()
  • json_decode() - Decodifica una cadena JSON
  • json_encode() - Retorna la representación JSON de un valor

To Top