json_encode

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

json_encodeRetorna 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ónDescripción
7.3.0JSON_THROW_ON_ERROR Se añadió a flags.
7.2.0JSON_INVALID_UTF8_IGNORE, and JSON_INVALID_UTF8_SUBSTITUTE Se añadieron a flags.
7.1.0JSON_UNESCAPED_LINE_TERMINATORS Se añadió a flags.
7.1.0serialize_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

To Top