Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cuál es la mejor forma de guardar arrays PHP: json_encode o serialize?

29 de abril de 2009

En mi aplicación tengo que cachear un array asociativo multi-dimensional en un archivo plano. No es habitual, pero algunas veces también tengo que convertir estos contenidos a JSON para servirlos en mi aplicación web. Pero casi siempre utilizaré el array PHP directamente sin convertirlo a JSON.

¿Cuál sería la forma más eficiente de guardar el array, convertirlo a JSON o serializarlo directamente? Al parecer en las versiones PHP más recientes la función json_decode() es más rápida que unserialize().

En estos momentos estoy más decidido a utilizar JSON porque es mucho más sencillo de leer por parte de los humanos en caso de que sea necesario. Además, con JSON puedo utilizar la información directamente en PHP y JavaScript.

¿Alguien podría indicarme algunas diferencias y ventajas/desventajas de cada método? ¿Alguien tiene benchmarks que comparen el rendimiento de cada método?

Muchas gracias por la ayuda.


Estás leyendo una traducción autorizada de la pregunta Preferred method to store PHP arrays (json_encode vs serialize) planteada por KyleFarris en StackOverflow.


Respuestas

#1

Como casi siempre, la respuesta depende de tus necesidades.

Si el rendimiento es lo más importante para tí, sin duda deberías elegir el método más rápido de los dos. Pero asegúrate de entender bien las diferencias entre los dos:

  • json_encode() por defecto convierte los caracteres UTF-8 en secuencias de escape Unicode, mientras que serialize() no lo hace. Nota: a partir de PHP 5.4 puedes utilizar la opción JSON_UNESCAPED_UNICODE para desactivar este comportamiento.
  • La estructura de datos JSON no guarda ninguna referencia sobre la clase del objeto que se trasformó. Por eso nunca podrás recuperar la clase original y siempre obtendrás como resultado la clase stdClass de PHP.
  • No puedes usar los métodos mágicos __sleep() y __wakeup() con JSON.
  • JSON solamente serialize las propiedades public, por lo que perderás las propiedad protected y private.

Otros programadores aseguran que siempre se debería utilizar JSON porque es más rápido y sencillo que la serialización de PHP, salvo que:

  • Almacenes arrays muy complejos, ya que json_decode() tiene un límite de 127 niveles de anidamiento de arrays.
  • Debas almacenar la clase original del objeto para que al deserializar la información obtengas exactamente el mismo objeto.
  • Tengas que dar soporte a versiones PHP muy viejas que no soportan json_decode().

@librosweb

4 octubre 2014, 20:10