Decodifica una cadena JSON

# json_decode

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)

json_decode — Decodifica una cadena JSON

### Descripción

function json_decode(
string `$json`,
?bool `$associative` = `null`,
int `$depth` = 512,
int `$flags` = 0
): mixed

Recupera una cadena codificada en JSON y la convierte en un valor de PHP.

### Parámetros

`json`

  La string `json` a decodificar.

  Esta función solo funciona con cadenas codificadas en UTF-8.

  > Nota: PHP implementa un superconjunto de JSON tal como se especifica en el » RFC 7159 original.

`associative`

  Cuando este parámetro vale `true`, los objetos JSON serán devueltos como arrays asociativos; cuando este parámetro vale `false`, los objetos JSON serán devueltos como objetos. Cuando este parámetro vale `null`, los objetos JSON serán devueltos como arrays asociativos o como objetos, según si la constante `JSON_OBJECT_AS_ARRAY` ha sido definida en el parámetro `flags`.

`depth`

  Profundidad máxima de anidamiento de la estructura en proceso de decodificación. El valor debe ser superior a `0`, e inferior o igual a `2147483647`.

`flags`

  Máscara de bits compuesta por `JSON_BIGINT_AS_STRING`, `JSON_INVALID_UTF8_IGNORE`, `JSON_INVALID_UTF8_SUBSTITUTE`, `JSON_OBJECT_AS_ARRAY`, `JSON_THROW_ON_ERROR`. El comportamiento de estas constantes se describe en la página de las constantes JSON.

### Valores devueltos

Devuelve el valor codificado en el parámetro `json` en el tipo PHP apropiado. Los valores sin comillas `true`, `false` y `null` son devueltos respectivamente como `true`, `false` y `null`. `null` es devuelto si el parámetro `json` no ha podido ser decodificado o si los datos codificados son más profundos que el límite de anidamiento proporcionado.

### Errores/Excepciones

Si `depth` está fuera del rango permitido, una ValueError es lanzada a partir de PHP 8.0.0, mientras que anteriormente se generaba un error de nivel `E_WARNING`.

### Historial de cambios

Versión | Descripción
--- | ---
7.3.0 | El `flags` `JSON_THROW_ON_ERROR` ha sido añadido.
7.2.0 | El parámetro `associative` ahora es nullable.
7.2.0 | Los `flags` `JSON_INVALID_UTF8_IGNORE`, y `JSON_INVALID_UTF8_SUBSTITUTE` han sido añadidos.
7.1.0 | Una clave JSON vacía ("") puede ser codificada en la propiedad de objeto vacía en lugar de usar una clave con el valor `_empty_`.

### Ejemplos

Ejemplo #1 Ejemplo con json_decode()

    <?php
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, true));

    ?>

El ejemplo anterior mostrará:

    object(stdClass)#1 (5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }

    array(5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }

Ejemplo #2 Acceso a propiedades de objeto inválidas

Acceder a elementos de un objeto que contienen caracteres no permitidos por la convención de nombres de PHP (es decir, el guión) puede realizarse encapsulando el nombre del elemento con corchetes y comillas.

    <?php

    $json = '{"foo-bar": 12345}';

    $obj = json_decode($json);
    print $obj->{'foo-bar'}; // 12345

    ?>

Ejemplo #3 Errores comunes al usar la función json_decode()

    <?php

    // Las siguientes cadenas son válidas en JavaScript pero no en JSON

    // El nombre y el valor deben estar rodeados de comillas dobles.
    // Las comillas simples no son válidas.
    $bad_json = "{ 'bar': 'baz' }";
    json_decode($bad_json); // null

    // El nombre debe estar rodeado de comillas dobles.
    $bad_json = '{ bar: "baz" }';
    json_decode($bad_json); // null

    // La coma final no está permitida.
    $bad_json = '{ bar: "baz", }';
    json_decode($bad_json); // null

    ?>

Ejemplo #4 Errores con el parámetro `depth`

    <?php
    // Codificación de datos con un nivel máximo de anidamiento de 4 (array -> array -> array -> string)
    $json = json_encode(
        array(
            1 => array(
                'English' => array(
                    'One',
                    'January'
                ),
                'French' => array(
                    'Une',
                    'Janvier'
                )
            )
        )
    );

    // Definición de errores
    $constants = get_defined_constants(true);
    $json_errors = array();
    foreach ($constants["json"] as $name => $value) {
     if (!strncmp($name, "JSON_ERROR_", 11)) {
      $json_errors[$value] = $name;
     }
    }

    $json = json_encode(
        array(
            1 => array(
                'English' => array(
                    'One',
                    'January'
                ),
                'French' => array(
                    'Une',
                    'Janvier'
                )
            )
        )
    );

    // Mostrar errores para diferentes niveles de anidamiento.
    var_dump(json_decode($json, true, 4));
    echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;

    var_dump(json_decode($json, true, 3));
    echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
    ?>

El ejemplo anterior mostrará:

    array(1) {
      [1]=>
      array(2) {
        ["English"]=>
        array(2) {
          [0]=>
          string(3) "One"
          [1]=>
          string(7) "January"
        }
        ["French"]=>
        array(2) {
          [0]=>
          string(3) "Une"
          [1]=>
          string(7) "Janvier"
        }
      }
    }
    Last error: No error

    NULL
    Last error: Maximum stack depth exceeded

Ejemplo #5 Ejemplo con json_decode() y grandes enteros

    <?php
    $json = '{"number": 12345678901234567890}';

    var_dump(json_decode($json));
    var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

    ?>

El ejemplo anterior mostrará:

    object(stdClass)#1 (1) {
      ["number"]=>
      float(1.2345678901235E+19)
    }
    object(stdClass)#1 (1) {
      ["number"]=>
      string(20) "12345678901234567890"
    }

### Notas

> Nota:

> La especificación JSON no forma parte de Javascript sino de un subproyecto de Javascript.

> Nota:

> Si ocurre un error durante la decodificación, la función json_last_error() (o json_last_error_msg() con PHP5.5+) podrá ser utilizada para determinar la naturaleza exacta del error.

### Ver también

- json_encode() - Retorna la representación JSON de un valor
- json_last_error() - Devuelve el último error JSON
- 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()

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open