Descubre por qué aparece esta advertencia en tu código PHP y cómo solucionarlo.

La  advertencia "json_encode() expects parameter 2 to be long, string given" ocurre normalmente porque está proporcionando en lugar del número de una constante, una cadena como segundo argumento para json_encode. Esto sucede normalmente porque está usando una constante inexistente como segundo argumento, por ejemplo, usando JSON_PRETTY_PRINTen PHP 5.3:

<?php

echo json_encode(array(), JSON_PRETTY_PRINT);

Esto en PHP 5.3 provocará la advertencia porque la constante se interpretará como una cadena literal porque esta constante se introdujo desde PHP 5.4. Lo mismo sucedería con muchas constantes que no están disponibles en la versión mencionada de PHP. En este artículo, le mostraremos dos formas de evitar que aparezca esta advertencia.

A. Use un valor entero constante

La advertencia como se mencionó, ocurre cuando la constante que proporciona como segundo argumento en la json_encodefunción no existe, por lo que PHP convierte el nombre de la constante en una cadena literal:

<?php

// En PHP 5.3 es como proporcionar:
echo json_encode(array(), "JSON_PRETTY_PRINT");
// que no es válido

Por lo tanto, deberá conocer el valor entero de la constante que desea usar en PHP 5.3:

JSON_HEX_TAG => 1
JSON_HEX_AMP => 2
JSON_HEX_APOS => 4
JSON_HEX_QUOT => 8
JSON_FORCE_OBJECT => 16
JSON_NUMERIC_CHECK => 32
JSON_UNESCAPED_SLASHES => 64
JSON_PRETTY_PRINT => 128
JSON_UNESCAPED_UNICODE => 256

JSON_ERROR_DEPTH => 1
JSON_ERROR_STATE_MISMATCH => 2
JSON_ERROR_CTRL_CHAR => 3

JSON_ERROR_SYNTAX => 4

JSON_ERROR_UTF8 => 5
JSON_OBJECT_AS_ARRAY => 1

JSON_BIGINT_AS_STRING => 2

Luego, simplemente proporcione como segundo argumento en el json_encodemétodo, por ejemplo con JSON_PRETTY_PRINT:

<?php

echo json_encode(array(), 128);

El fragmento anterior ya no mostraría la advertencia y así sucesivamente con las otras constantes que desea usar.

B. Defina las constantes JSON usted mismo

Si se encuentra en un entorno PHP 5.3.0, donde no puede acceder a las constantes JSON, es posible que desee definirlas todas en algún lugar de su proyecto antes de usarlas, de modo que las constantes existirán y, por lo tanto, la advertencia ya no aparecerá. :

<?php
   // json_encode() options
   define('JSON_HEX_TAG',                1);    // Since PHP 5.3.0
   define('JSON_HEX_AMP',                2);    // Since PHP 5.3.0
   define('JSON_HEX_APOS',               4);    // Since PHP 5.3.0
   define('JSON_HEX_QUOT',               8);    // Since PHP 5.3.0
   define('JSON_FORCE_OBJECT',           16);   // Since PHP 5.3.0
   define('JSON_NUMERIC_CHECK',          32);   // Since PHP 5.3.3
   define('JSON_UNESCAPED_SLASHES',      64);   // Since PHP 5.4.0
   define('JSON_PRETTY_PRINT',           128);  // Since PHP 5.4.0
   define('JSON_UNESCAPED_UNICODE',      256);  // Since PHP 5.4.0

   // json_decode() options
   define('JSON_OBJECT_AS_ARRAY',        1);    // Since PHP 5.4.0
   define('JSON_BIGINT_AS_STRING',       2);    // Since PHP 5.4.0
   define('JSON_PARSE_JAVASCRIPT',       4);    // upgrade.php

   // json_last_error() error codes
   define('JSON_ERROR_NONE',             0);    // Since PHP 5.3.0
   define('JSON_ERROR_DEPTH',            1);    // Since PHP 5.3.0
   define('JSON_ERROR_STATE_MISMATCH',   2);    // Since PHP 5.3.0
   define('JSON_ERROR_CTRL_CHAR',        3);    // Since PHP 5.3.0
   define('JSON_ERROR_SYNTAX',           4);    // Since PHP 5.3.0
   define('JSON_ERROR_UTF8',             5);    // Since PHP 5.3.3
   define('JSON_ERROR_RECURSION',        6);    // Since PHP 5.5.0
   define('JSON_ERROR_INF_OR_NAN',       7);    // Since PHP 5.5.0
   define('JSON_ERROR_UNSUPPORTED_TYPE', 8);    // Since PHP 5.5.0
?>

Después de definirlos, podrá usar su código como de costumbre:

<?php

echo json_encode(array(), JSON_PRETTY_PRINT);

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores