JSON ou serialize: o que escolher para armazenar arrays PHP?

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

JSON ou serialize: a eterna questão do desenvolvedor PHP

\n\n

Imagine: você está escrevendo um script em PHP que precisa salvar um array complexo com as configurações do usuário. Duas opções vêm à mente imediatamente: json_encode() e serialize(). Qual escolher? Esta pergunta atormenta milhares de desenvolvedores no Stack Overflow, e hoje vamos entender de uma vez por todas qual método é realmente melhor.

\n\n

Vou mostrar não apenas comparações superficiais, mas exemplos reais de código, testes de desempenho e as armadilhas que as documentações não contam. Vamos lá!

\n\n

O que json_encode e serialize têm em comum?

\n\n

Ambas as funções transformam estruturas de dados complexas (arrays, objetos) em uma string que pode ser salva em arquivo, banco de dados ou cache. Mas elas fazem isso de maneiras diferentes.

\n\n
    \n
  • json_encode — converte dados para o formato JSON padrão (texto compreensível para JavaScript e a maioria das linguagens).
  • \n
  • serialize — cria um formato interno do PHP que contém informações sobre os tipos de dados e pode restaurar objetos preservando as classes.
  • \n
\n\n

Exemplo simples de código

\n\n
<?php\n$array = [\n    'name' => 'João',\n    'age' => 30,\n    'skills' => ['PHP', 'JavaScript', 'Python']\n];\n\n// JSON\n$json = json_encode($array, JSON_UNESCAPED_UNICODE);\necho $json; // {"name":"João","age":30,"skills":["PHP","JavaScript","Python"]}\n\n// Serialize\n$serialized = serialize($array);\necho $serialized; // a:3:{s:4:"name";s:8:"João";s:3:"age";i:30;s:6:"skills";a:3:{i:0;s:3:"PHP";i:1;s:10:"JavaScript";i:2;s:6:"Python";}}\n?>
\n\n

A diferença é imediata: JSON é mais compacto e legível, enquanto serialize é mais verboso, mas contém mais metadados.

\n\n

Comparação por critérios-chave

\n\n

Vamos organizar tudo. Realizei testes e coletei dados que ajudarão você a decidir.

\n\n

1. Desempenho: qual é mais rápido?

\n\n

Muitos pensam que serialize é mais rápido por ser o formato "nativo" do PHP. Mas a realidade é mais complexa.

\n\n
<?php\n$largeArray = [];\nfor ($i = 0; $i < 10000; $i++) {\n    $largeArray[] = [\n        'id' => $i,\n        'name' => 'User_' . $i,\n        'data' => range(1, 50)\n    ];\n}\n\n// Teste json_encode\n$start = microtime(true);\n$json = json_encode($largeArray);\n$jsonTime = microtime(true) - $start;\n\n// Teste serialize\n$start = microtime(true);\n$serialized = serialize($largeArray);  \n$serializeTime = microtime(true) - $start;\n\necho "JSON: {$jsonTime} seg\\n";\necho "Serialize: {$serializeTime} seg\\n";\n// Resultado: JSON geralmente é 10-30% mais rápido\n?>
\n\n

Conclusão: json_encode geralmente é mais rápido, especialmente em arrays grandes. A razão é que JSON usa um algoritmo mais simples, sem preservar informações de classes.

\n\n

2. Tamanho dos dados: qual é mais compacto?

\n\n

JSON quase sempre ganha em tamanho. Compare você mesmo:

\n\n
    \n
  • JSON: {"name":"João","age":30} — 26 bytes
  • \n
  • Serialize: a:2:{s:4:"name";s:8:"João";s:3:"age";i:30;} — 41 bytes
  • \n
\n\n

Diferença de 1.5 a 2 vezes a favor do JSON. Se você armazena gigabytes de dados em cache, isso é crítico.

\n\n

3. Segurança: a ameaça oculta do serialize

\n\n

Aqui é onde muitos caem. unserialize() pode executar código arbitrário se receber dados adulterados. Isso é chamado de PHP object injection.

\n\n
<?php\n// Exemplo perigoso\n$userInput = $_GET['data']; // O usuário pode passar uma string maliciosa\n$object = unserialize($userInput); // Risco! Pode criar um objeto com código perigoso\n\n// Alternativa segura\n$jsonData = json_decode($userInput, true); // Apenas um array, sem objetos\n?>
\n\n

Importante: Nunca use unserialize() com dados fornecidos pelo usuário. JSON é absolutamente

Blogs

Book Recommendations