PHP Codificar una cadena JSON


Ejemplo

La función json_encode convertirá una matriz PHP (o, desde PHP 5.4, un objeto que implementa la interfaz JsonSerializable ) en una cadena codificada en JSON. Devuelve una cadena codificada en JSON en caso de éxito o FALSE en caso de error.

$array = [
    'name' => 'Jeff',
    'age' => 20,
    'active' => true,
    'colors' => ['red', 'blue'],
    'values' => [0=>'foo', 3=>'bar'],
];

Durante la codificación, los tipos de datos de PHP, cadena, entero y booleano se convierten a su equivalente JSON. Las matrices asociativas se codifican como objetos JSON y, cuando se llaman con argumentos predeterminados, las matrices indexadas se codifican como matrices JSON. (A menos que las claves de matriz no sean una secuencia numérica continua que comience desde 0, en cuyo caso la matriz se codificará como un objeto JSON).

echo json_encode($array);

Salida:

{"name":"Jeff","age":20,"active":true,"colors":["red","blue"],"values":{"0":"foo","3":"bar"}}

Argumentos

Desde PHP 5.3, el segundo argumento de json_encode es una máscara de bits que puede ser una o más de las siguientes.

Al igual que con cualquier máscara de bits, se pueden combinar con el operador binario OR | .

PHP 5.x 5.3

JSON_FORCE_OBJECT

Fuerza la creación de un objeto en lugar de una matriz.

$array = ['Joel', 23, true, ['red', 'blue']];
echo json_encode($array);
echo json_encode($array, JSON_FORCE_OBJECT);

Salida:

["Joel",23,true,["red","blue"]]
{"0":"Joel","1":23,"2":true,"3":{"0":"red","1":"blue"}}

JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_HEX_QUOT

Asegura las siguientes conversiones durante la codificación:

Constante Entrada Salida
JSON_HEX_TAG < \u003C
JSON_HEX_TAG > \u003E
JSON_HEX_AMP & \u0026
JSON_HEX_APOS ' \u0027
JSON_HEX_QUOT " \u0022
$array = ["tag"=>"<>", "amp"=>"&", "apos"=>"'", "quot"=>"\""];
echo json_encode($array);
echo json_encode($array, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

Salida:

{"tag":"<>","amp":"&","apos":"'","quot":"\""}
{"tag":"\u003C\u003E","amp":"\u0026","apos":"\u0027","quot":"\u0022"}
PHP 5.x 5.3

JSON_NUMERIC_CHECK

Asegura que las cadenas numéricas se conviertan a enteros.

$array = ['23452', 23452];
echo json_encode($array);
echo json_encode($array, JSON_NUMERIC_CHECK);

Salida:

["23452",23452]    
[23452,23452]
PHP 5.x 5.4

JSON_PRETTY_PRINT

Hace el JSON fácilmente legible

$array = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
echo json_encode($array);
echo json_encode($array, JSON_PRETTY_PRINT);

Salida:

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

JSON_UNESCAPED_SLASHES

Incluye barras inclinadas / salientes en la salida

$array = ['filename' => 'example.txt', 'path' => '/full/path/to/file/'];
echo json_encode($array);
echo json_encode($array, JSON_UNESCAPED_SLASHES);

Salida:

{"filename":"example.txt","path":"\/full\/path\/to\/file"}
{"filename":"example.txt","path":"/full/path/to/file"}

JSON_UNESCAPED_UNICODE

Incluye caracteres codificados en UTF8 en la salida en lugar de cadenas codificadas en \u

$blues = ["english"=>"blue", "norwegian"=>"blå", "german"=>"blau"];
echo json_encode($blues);
echo json_encode($blues, JSON_UNESCAPED_UNICODE);

Salida:

{"english":"blue","norwegian":"bl\u00e5","german":"blau"}
{"english":"blue","norwegian":"blå","german":"blau"}
PHP 5.x 5.5

JSON_PARTIAL_OUTPUT_ON_ERROR

Permite que la codificación continúe si se encuentran algunos valores no codificables.

$fp = fopen("foo.txt", "r");
$array = ["file"=>$fp, "name"=>"foo.txt"];
echo json_encode($array); // no output
echo json_encode($array, JSON_PARTIAL_OUTPUT_ON_ERROR);

Salida:

{"file":null,"name":"foo.txt"}
PHP 5.x 5.6

JSON_PRESERVE_ZERO_FRACTION

Asegura que los flotadores estén siempre codificados como flotadores.

$array = [5.0, 5.5];
echo json_encode($array);
echo json_encode($array, JSON_PRESERVE_ZERO_FRACTION);

Salida:

[5,5.5]
[5.0,5.5]
PHP 7.x 7.1

JSON_UNESCAPED_LINE_TERMINATORS

Cuando se usa con JSON_UNESCAPED_UNICODE , vuelve al comportamiento de versiones anteriores de PHP y no escapa a los caracteres U + 2028 LINE SEPARATOR y U + 2029 PARAGRAPH SEPARATOR. Aunque son válidos en JSON, estos caracteres no son válidos en JavaScript, por lo que el comportamiento predeterminado de JSON_UNESCAPED_UNICODE se cambió en la versión 7.1.

$array = ["line"=>"\xe2\x80\xa8", "paragraph"=>"\xe2\x80\xa9"];
echo json_encode($array, JSON_UNESCAPED_UNICODE);
echo json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS);

Salida:

{"line":"\u2028","paragraph":"\u2029"}
{"line":"
","paragraph":"
"}