online - serialize jquery php
JSON vs. Matriz serializada en la base de datos (11)
¿Cuáles son las ventajas y desventajas de almacenar datos JSON en la base de datos MySQL frente a la matriz serializada?
Pro JSON:
- Los datos JSON pueden ser utilizados por muchos idiomas diferentes, no solo PHP
- Los datos JSON son legibles y escribibles por humanos.
- Ocupa menos espacio
- Es más rápido codificar JSON que serializar
Matriz serializada Pro:
- Es más rápido desretrazar que decodificar JSON
Como indican los comentarios, JSON ocupa menos espacio que una matriz de serialización. También verifiqué si JSON o serialización es más rápido y, sorprendentemente, es más rápido codificar JSON que serializar. Sin embargo, es más rápido des seralizar que decodificar JSON.
Este es el script que usé para probar:
<?php
function runTime(){
$mtime = microtime();
$mtime = explode('' '', $mtime);
$mtime = $mtime[1] + $mtime[0];
return $mtime;
}
?>
<pre>
<?php
$start = runTime();
$ser;
for($i=0; $i<1000; $i++){
$a = array(a => 1, x => 10);
$ser = serialize($a);
}
$total = runTime() - $start;
echo "Serializing 1000 times took /t$total seconds";
?>
<?php
$start = runTime();
$json;
for($i=0; $i<1000; $i++){
$a = array(a => 1, x => 10);
$json = json_encode($a);
}
$total = runTime() - $start;
echo "JSON encoding 1000 times took /t$total seconds";
?>
<?php
$start = runTime();
$ser;
for($i=0; $i<1000; $i++){
$a = unserialize($ser);
}
$total = runTime() - $start;
echo "Unserializing 1000 times took /t$total seconds";
?>
<?php
$start = runTime();
$json;
for($i=0; $i<1000; $i++){
$a = json_decode($json);
}
$total = runTime() - $start;
echo "JSON decoding 1000 times took /t$total seconds";
?>
</pre>
- JSON encode () y decode ()
- Versión de PHP> = 5.0.0
- Límite de anidación de 20.
- Versión de PHP> = 5.2.3
- Límite de anidamiento de 128.
- Versión de PHP> = 5.3.0
- Límite de anidación de 512.
- Pequeña huella frente a la cadena serializada de PHP.
- Versión de PHP> = 5.0.0
- serialize () y unserialize ()
- Versión de PHP> = 4.0.0
- Los métodos no se pierden en PHP Datatype Object.
- El método mágico __wakeup () requiere que cualquier objeto sea deserializado. (MUY PODEROSO)
- Se ha observado que algunas veces es mejor que las cadenas de codificación de base64 colocadas en la base de datos, y las cadenas de decodificación base64 extraídas de la base de datos con esta función, ya que hay algunos problemas con el manejo de algunos caracteres de espacios en blanco.
- Versión de PHP> = 4.0.0
La decisión es tuya.
¿Estás usando tus datos solo con PHP? En caso afirmativo: matrices, si no: JSON.
Pro Array
- sesiones de serialización utilizadas: creo que es más rápido que json_encode / decode (no estoy seguro)
- muchas funciones en arreglos en PHP (clasificación / fusión / ...)
Pro JSON
- JSON es conocido en otros idiomas e idiomas web
- menos detallado en la base de datos
- muchas herramientas, como XML: JSON SChema
Acabo de tener este gran problema con php serialize . Almacenaba una gran cantidad de datos en un solo campo en el que utilizaba unserialize para leer.
Lo que sucedió es que obtuve algunos datos corruptos en ese campo. Serialize correlaciona los datos con códigos como ''a'', ''s'' y ''N''. Si hay datos corruptos, el mapa falló. Mostrará un error php que la función unserialize no puede funcionar debido a un error de código de bytes.
Entonces mi punto es evitar serializar . Ve con JSON , mucho más seguro y no te darás cuenta de problemas mayores en el futuro.
Para mí, no más serializar .
Hubo muchas preguntas sobre SO.
Método preferido para almacenar matrices PHP (json_encode vs serialize)
En resumen: JSON es mejor para datos simples, pero no distingue la diferencia entre objeto y matriz asociativa. Los datos serializados son más grandes.
JSON es más portátil, es decir, puede leerlo / escribir más fácilmente desde diferentes idiomas, etc. Si utilizó matrices PHP serializadas, solo podrá usar PHP fácilmente para acceder a ellas.
JSON supera a la serialización como ya se señaló en la mayoría de las respuestas. Creo que la mayor ventaja es su independencia de plataforma. Es posible que otras aplicaciones se comuniquen con su base de datos y que no tengan nada que ver con php.
Pero ambas soluciones violan la normalización de la base de datos . Su base de datos ni siquiera estará en la primera forma normal, por lo que no puede aprovechar ninguna característica de la base de datos, como, por ejemplo, la búsqueda. Un mejor enfoque es usar mapeo relacional de objetos . Hay buenas bibliotecas por ahí; considere, por ejemplo, la doctrina ORM .
Portabilidad: Ganador JSON. JSON es compatible con una variedad más amplia de plataformas, mientras que la deserialización PHP solo es compatible (hasta donde yo sé) con PHP. Si bien es posible analizar cualquier formato en cualquier idioma, JSON tiene más bibliotecas pre compiladas.
Prueba futura: ganador JSON. JSON es un "estándar", en el sentido de que Javascript es un estándar, y no es probable que cambie en el futuro. El grupo PHP no ha hecho ninguna promesa sobre el futuro del formato de serialización, y si bien es poco probable que cambie en el futuro, el hecho de que un solo grupo controle el formato significa que usted puede terminar con datos futuros que no se pueden leer.
Fidelity: Ganador PHP. La serialización de PHP le permitirá almacenar datos con tipos de datos nativos de PHP, incluidos los objetos definidos por clases personalizadas. JSON solo le permitirá almacenar tipos primitivos genéricos, listas de tipos primitivos ("matrices") y objetos pares clave / valor. La serialización PHP puede proporcionar algunas ventajas aquí si está desarrollando una aplicación PHP.
Tamaño de archivo: JSON tiene una pequeña ganancia aquí, ya que el formato de serialización actual de PHP es más detallado (ya que almacena más información).
Rendimiento: quién sabe, depende, perfil.
Conclusión: vaya con JSON a menos que tenga una razón convincente para usar la serialización de PHP.
Si está tratando de evitar citas y caracteres especiales en su JSON.stringify (obj), puede hacerlo en PHP utilizando sus métodos de escape específicos de la base de datos.
<?php
mysql_real_escape_string(htmlspecialchars($value))
?>
ahora puede almacenar esto de manera segura y decodificarlo cuando lo lea de nuevo
Use json for para matrices y comunicación con Javascript u otro idioma. Use serialize para objetos o cualquier trabajo PHP interno para el script en ejecución actual.
atm, json_encode () funciona solo con datos codificados en UTF-8 ... por lo tanto, no puede codificar caracteres como "ñ", de lo contrario, devuelve NULL