Serialização de objetos em Node.js: JSON, Buffer e Protobuf

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

Serialização de objetos em JavaScript (Node.js): de JSON a protocolos binários



Serialização é o processo de converter estruturas de dados complexas (objetos, arrays, Map, Set) em um formato que pode ser salvo em um arquivo, transmitido pela rede ou armazenado em um banco de dados. No Node.js, essa tarefa é especialmente crítica, pois aplicações de servidor frequentemente trabalham com grandes volumes de dados, microsserviços e conexões WebSocket. Neste artigo, abordaremos as principais ferramentas e bibliotecas para serialização de objetos no ambiente Node.js.



1. JSON nativo: o padrão de facto

O módulo JSON está disponível no Node.js sem a necessidade de instalar pacotes adicionais. Ele suporta os métodos JSON.stringify() e JSON.parse().



const user = {  name: 'Ana',  age: 28,  skills: ['JavaScript', 'Node.js'],  active: true};

// Serializaçãoconst jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"Ana","age":28,"skills":["JavaScript","Node.js"],"active":true}

// Desserializaçãoconst parsedUser = JSON.parse(jsonString);console.log(parsedUser.name); // Ana


Vantagens:

  • Formato legível por humanos
  • Suporte nativo em todos os ambientes
  • Facilidade de depuração


Desvantagens:

  • Não suporta undefined, BigInt, Date (converte para string), Map, Set
  • Mais lento que formatos binários
  • Tamanho excessivo devido a elementos sintáticos (aspas, vírgulas)


2. Buffer e serialização binária no Node.js

Para aplicações de alto desempenho (jogos, dados financeiros, IoT), utilizam-se formatos binários. No Node.js, existe o módulo Buffer para isso.



const buf = Buffer.alloc(8);buf.writeUInt32BE(123456, 0); // escreve um inteiro sem sinal de 4 bytesbuf.writeUInt32BE(789012, 4); // segundo número

console.log(buf); // <Buffer 00 01 e2 40 00 0c 08 14>

// Leituraconst a = buf.readUInt32BE(0); // 123456const b = buf.readUInt32BE(4); // 789012


Para serialização complexa de objetos em formato binário, é melhor usar bibliotecas especializadas.



3. Protocol Buffers (protobuf) — serialização binária eficiente

A biblioteca protobuf.js permite serializar objetos de acordo com um esquema descrito em arquivos .proto. Este é o padrão usado em gRPC e em muitas arquiteturas de microsserviços.



Instalação:

npm install protobufjs


Exemplo de uso:

const protobuf = require('protobufjs');

protobuf.load('user.proto').then(root => { const User = root.lookupType('userpackage.User');

const payload = { id: 1, name: 'João', email: 'joao@example.com' }; // Serialização const errMsg = User.verify(payload); if (errMsg) throw Error(errMsg); const buffer = User.encode(payload).finish(); console.log('Buffer binário:', buffer);

// Desserialização const decoded = User.decode(buffer); console.log('Decodificado:', decoded);});


Arquivo user.proto:

syntax = "proto3";package userpackage;message User {  int32 id = 1;  string name = 2;  string email = 3;}


Vantagens:

  • Máximo desempenho
  • Tamanho compacto (30-50% menor que JSON)
  • Tipagem forte e validação
  • Multiplataforma


Desvantagens:

  • Requer descrição do esquema (.proto)
  • Depuração mais complexa (dados binários)
  • Necessidade de sincronizar esquemas entre serviços


4. MessagePack — JSON binário

Recommendations