# json_encode

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

json_encode — Retorna la representación JSON del valor dado

### Descripción

json_encode(mixed `$value`, int `$flags` = 0, int `$depth` = 512): string|false

Devuelve un string con la representación JSON de `value`.

La codificación se ve afectada por los `flags` suministrados y además la codificación de los valores de tipo float dependen del valor de serialize_precision.

### Parámetros

`value`

  El `value` a ser codificado. Puede ser de cualquier tipo menos un resource.

  Todos los datos de tipo string deben estar codificados con UTF-8.

  > Nota:

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

`flags`

  Máscara de bits que compuesta por `JSON_FORCE_OBJECT`, `JSON_HEX_QUOT`, `JSON_HEX_TAG`, `JSON_HEX_AMP`, `JSON_HEX_APOS`, `JSON_INVALID_UTF8_IGNORE`, `JSON_INVALID_UTF8_SUBSTITUTE`, `JSON_NUMERIC_CHECK`, `JSON_PARTIAL_OUTPUT_ON_ERROR`, `JSON_PRESERVE_ZERO_FRACTION`, `JSON_PRETTY_PRINT`, `JSON_UNESCAPED_LINE_TERMINATORS`, `JSON_UNESCAPED_SLASHES`, `JSON_UNESCAPED_UNICODE`, `JSON_THROW_ON_ERROR`. El comportamiento de estas constantes se describe en la página de constantes de JSON.

`depth`

  Establece la profundidad máxima. Debe ser mayor que cero.

### Valores devueltos

Devuelve un string JSON codificado en caso de éxito o `false` en caso de error.

### Historial de cambios

Versión | Descripción
--- | ---
7.3.0 | `JSON_THROW_ON_ERROR` Se añadió a `flags`.
7.2.0 | `JSON_INVALID_UTF8_IGNORE`, and `JSON_INVALID_UTF8_SUBSTITUTE` Se añadieron a `flags`.
7.1.0 | `JSON_UNESCAPED_LINE_TERMINATORS` Se añadió a `flags`.
7.1.0 | serialize_precision se utiliza en lugar de precision al codificar 'doubles'.

### Ejemplos

Ejemplo #1 Un ejemplo de json_encode()

`<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>`

El resultado del ejemplo sería:

    {"a":1,"b":2,"c":3,"d":4,"e":5}

Ejemplo #2 Un ejemplo de json_encode() mostrando algunas de las opciones en acción

`<?php
$a = array('<foo>',"'bar'",'"baz"','&blong&', "\xc3\xa9");
echo "Normal: ", json_encode($a), "\n";
echo "Tags: ", json_encode($a, JSON_HEX_TAG), "\n";
echo "Apos: ", json_encode($a, JSON_HEX_APOS), "\n";
echo "Quot: ", json_encode($a, JSON_HEX_QUOT), "\n";
echo "Amp: ", json_encode($a, JSON_HEX_AMP), "\n";
echo "Unicode: ", json_encode($a, JSON_UNESCAPED_UNICODE), "\n";
echo "All: ", json_encode($a, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE), "\n\n";
$b = array();
echo "Array vacío retornado como array: ", json_encode($b), "\n";
echo "Array vacío retornado como object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";
$c = array(array(1,2,3));
echo "Array no asociativo retornado como array: ", json_encode($c), "\n";
echo "Array no asociativo retornado como objeto: ", json_encode($c, JSON_FORCE_OBJECT), "\n\n";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Array asociativo siempre es retornado como objeto: ", json_encode($d), "\n";
echo "Array asociativo siempre es retornado como objeto: ", json_encode($d, JSON_FORCE_OBJECT), "\n\n";
?>`

El resultado del ejemplo sería:

    Normal: ["<foo>","'bar'","\"baz\"","&blong&","\u00e9"]
    Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&","\u00e9"]
    Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&","\u00e9"]
    Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&","\u00e9"]
    Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026","\u00e9"]
    Unicode: ["<foo>","'bar'","\"baz\"","&blong&","é"]
    All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026","é"]

    Array vacío retornado como array: []
    Array vacío retornado como object: {}

    Array no asociativo retornado como array: [[1,2,3]]
    Array no asociativo retornado como objeto: {"0":{"0":1,"1":2,"2":3}}

    Array asociativo siempre es retornado como objeto: {"foo":"bar","baz":"long"}
    Array asociativo siempre es retornado como objeto: {"foo":"bar","baz":"long"}

Ejemplo #3 Ejemplo de la opción JSON_NUMERIC_CHECK

`<?php
echo "Los string que representan números automáticamente se convierten en números".PHP_EOL;
$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
$numbers,
json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "String que contienen números formateados incorrectamente".PHP_EOL;
$strings = array('+a33123456789', 'a123');
var_dump(
$strings,
json_encode($strings, JSON_NUMERIC_CHECK)
);
?>`

El resultado del ejemplo sería:

    Los string que representan números automáticamente se convierten en números
    array(4) {
      [0]=>
      string(7) "+123123"
      [1]=>
      string(7) "-123123"
      [2]=>
      string(5) "1.2e3"
      [3]=>
      string(7) "0.00001"
    }
    string(28) "[123123,-123123,1200,1.0e-5]"
    String que contienen números formateados incorrectamente
    array(2) {
      [0]=>
      string(13) "+a33123456789"
      [1]=>
      string(4) "a123"
    }
    string(24) "["+a33123456789","a123"]"

Ejemplo #4 Ejemplo de array secuencial contra array no secuencial

`<?php
echo "Array sencuencial".PHP_EOL;
$sequential = array("foo", "bar", "baz", "blong");
var_dump(
$sequential,
json_encode($sequential)
);
echo PHP_EOL."Array no secuencial".PHP_EOL;
$nonsequential = array(1=>"foo", 2=>"bar", 3=>"baz", 4=>"blong");
var_dump(
$nonsequential,
json_encode($nonsequential)
);
echo PHP_EOL."Array secuencial con una clave destruida".PHP_EOL;
unset($sequential[1]);
var_dump(
$sequential,
json_encode($sequential)
);
?>`

El resultado del ejemplo sería:

    Array sencuencial
    array(4) {
      [0]=>
      string(3) "foo"
      [1]=>
      string(3) "bar"
      [2]=>
      string(3) "baz"
      [3]=>
      string(5) "blong"
    }
    string(27) "["foo","bar","baz","blong"]"

    Array no secuencial"
    array(4) {
      [1]=>
      string(3) "foo"
      [2]=>
      string(3) "bar"
      [3]=>
      string(3) "baz"
      [4]=>
      string(5) "blong"
    }
    string(43) "{"1":"foo","2":"bar","3":"baz","4":"blong"}"

    Array secuencial con una clave destruida
    array(3) {
      [0]=>
      string(3) "foo"
      [2]=>
      string(3) "baz"
      [3]=>
      string(5) "blong"
    }
    string(33) "{"0":"foo","2":"baz","3":"blong"}"

Ejemplo #5 Ejemplo de la opción `JSON_PRESERVE_ZERO_FRACTION`

`<?php
var_dump(json_encode(12.0, JSON_PRESERVE_ZERO_FRACTION));
var_dump(json_encode(12.0));
?>`

El resultado del ejemplo sería:

    string(4) "12.0"
    string(2) "12"

### Notas

> Nota:

> En el evento de un fallo a codificar, json_last_error() puede ser usado para determinar la naturaleza exacta del error.

> Nota:

> Cuando se codifica un array, si las claves no están en una secuencia numérica continua comenzando por 0, todas las claves son codificadas como cadenas, y explícitamente especificadas para cada pareja clave-valor.

> Nota:

> Al igual que el codificador JSON de referencia, json_encode() generará JSON que es un valor simple (esto es, ni un objeto ni un array) si de proporciona un string, integer, float o boolean como entrada de `value`. Mientras que muchos decodificadores aceptarán estos valores como JSON válido, algunos no lo harán, ya que la especificación es ambigua en este aspecto.

> Para resumir, compruebe siempre que el decodificador de JSON puede manejar la salida que se genere desde json_encode().

### Ver también

- JsonSerializable
- json_decode() - Decodifica un string de JSON
- json_last_error() - Devuelve el último error ocurrido
- serialize() - Genera una representación apta para el almacenamiento de un valor