JSON a MessagePack
Codifica JSON in MessagePack nel browser. Output in base64 o hex, pronto per essere infilato in un frame WebSocket, in un valore Redis o in un body HTTP.
Input
Output
Cos'è JSON a MessagePack?
Hai una config JSON che sta per uscire da un WebSocket col budget tirato — MessagePack la riduce del 30-60% rispetto allo stesso payload in JSON, e lo fa senza rinunciare alla sensazione schemaless e "è solo un oggetto" che rende JSON piacevole da usare. Questa pagina codifica il JSON che incolli a sinistra in un flusso di byte msgpack a destra, servito di default come base64 e commutabile in hex con un clic.
La codifica gira interamente nel tuo browser usando la libreria ufficiale @msgpack/msgpack, quindi il JSON non lascia mai la scheda. Sotto il cofano facciamo il parse dell'input con JSON.parse (lo stesso parser descritto dalla RFC di JSON), passiamo l'oggetto risultante a msgpackEncode e trasformiamo lo Uint8Array restituito in una stringa adatta al trasporto — base64 (secondo la RFC 4648) o hex minuscolo.
Usa base64 quando incorpori i byte in JSON, in un header HTTP o in un campo di database. Usa hex quando confronti un campione byte per byte con la specifica wire di msgpack o con un log del server. Stessi byte, rappresentazione diversa.
Come usare il codificatore JSON a MessagePack
Tre passi. La conversione parte automaticamente mentre scrivi — niente bottoni da cliccare.
Incolla JSON o carica l'esempio
Butta il tuo JSON nell'editor a sinistra. Clicca JSON di esempio per un piccolo payload d'ordine che copre i casi che contano — stringhe, interi, float e un array annidato. Il codificatore tratta l'input secondo il sistema di tipi standard di MessagePack: gli interi prendono la forma fixint/int8/int16/int32/int64 più piccola che entra, i float diventano float64, le stringhe vanno in fixstr/str8/16/32 in base alla lunghezza, gli array usano fixarray/array16/32 e le map usano fixmap/map16/32. Esempio di input:
{
"orderId": "ORD-7421",
"items": [{ "sku": "SKU-101", "qty": 2 }],
"total": 89.50
}Un JSON di 90 byte come questo si codifica tipicamente in ~55 byte di msgpack — un terzo in meno, prima ancora di passarci sopra un livello di gzip.
Alterna tra hex e base64
Il formato di output di default è base64, perché di solito è quello che incolli in una config o spedisci sulla rete. Clicca Output hex per passare a hex minuscolo se stai facendo un diff contro un codificatore lato server o vuoi guardare a occhio i byte di tipo (es. 0x82 per un fixmap di 2). Alterna quante volte vuoi — i byte sotto sono gli stessi.
Copia e spedisci
Clicca Copia per portare l'output negli appunti. Mettilo direttamente in un SET di Redis, in un frame di testo WebSocket, in un body HTTP con Content-Type: application/x-msgpack o in una colonna bytea di Postgres (decodifica prima il base64). Per andare nel verso opposto, incollalo nella nostra pagina MessagePack a JSON.
Quando lo userai davvero
Ridurre i frame WebSocket
Le app real-time con aggiornamenti rumorosi al secondo sentono la differenza di dimensione. Un aggiornamento di posizione o un tick di order book che pesa 220 byte come JSON cala a ~140 byte come msgpack — su migliaia di frame al secondo, fa la differenza. Converti qui un messaggio campione, incolla i byte nel tuo test harness e verifica che il ricevitore li decodifichi allo stesso modo.
Compattare i valori in cache
Cache come Redis ti fanno pagare ogni byte memorizzato e ogni byte letto. Codificare gli oggetti in cache come msgpack invece che come testo JSON-stringificato risparmia storage e rete a ogni hit. Usa questa pagina per dare un'occhiata a come un dato oggetto viene fuori in byte prima di fissare la codifica nel tuo serializer.
Inviare numeri tipizzati
JSON ha un solo tipo numerico e tratta 42 esattamente come 42.0. MessagePack distingue intero e float sul filo — utile quando il ricevitore è in un linguaggio fortemente tipato come Go, Rust o C# e non vuoi passare per una stringa. Incolla un numero JSON e ispeziona il byte di tipo nell'output hex per confermare che sia stato codificato come int e non come float.
Debuggare un decodificatore
Hai un servizio che "dovrebbe" essere msgpack ma il consumer si strozza sui byte? Codifica lo stesso JSON qui, confronta l'output del tuo servizio col nostro byte per byte in modalità hex, e la divergenza ti dice esattamente quale campo o quale tipo è sbagliato. L'encoder di riferimento segue la spec pubblicata alla lettera.
Domande frequenti
Il JSON esce mai dal mio browser?
No. Il JSON viene fatto il parse dal JSON.parse integrato nel browser, codificato dalla libreria @msgpack/msgpack in JavaScript lato client e renderizzato come base64 o hex nel pannello di destra — nessuna chiamata al server, nessuna telemetria sull'input, niente viene loggato. Puoi aprire i DevTools e confermare che il tab di rete resta in silenzio mentre scrivi. Sicuro per config proprietarie e dati cliente.
Perché l'output è più grande di quanto mi aspettassi?
Di solito due motivi. Primo, base64 gonfia il conteggio dei byte di circa il 33% — se confronti msgpack-in-base64 con testo JSON direttamente non stai confrontando la dimensione vera sul filo. Passa a hex (che gonfia 2x) o, meglio, guarda la lunghezza in byte: nei DevTools, atob(output).length ti dà la dimensione reale. Secondo, msgpack batte JSON solo quando i dati hanno tanti numeri, booleani o stringhe corte ripetute. Un blob composto al 90% da stringhe lunghe e uniche sarà più o meno della stessa dimensione in entrambi i formati.
Come vengono gestiti interi, float e numeri grandi?
Il JSON.parse di JavaScript trasforma ogni numero in un float a 64 bit, quindi quando i dati arrivano all'encoder abbiamo già perso la distinzione int-vs-float. La libreria si comporta in modo ragionevole: un valore intero e dentro l'intervallo safe-int viene codificato come int (usando la variante più piccola — fixint, int8, int16, int32 o int64). Tutto il resto come float64. Se ti servono interi 64 bit esatti (tipo Snowflake ID), passali nel JSON come stringhe e poi convertili sul ricevitore.
Posso codificare blob binari (tipo byte di file) con questo?
Direttamente attraverso JSON, no — JSON non ha tipo bin, quindi un Uint8Array fa il giro in questa UI come stringa base64 e viene ricodificato come str di msgpack, non come bin. Se ti servono davvero i tipi bin o ext di msgpack (le due grandi feature esclusive di msgpack), devi costruire l'oggetto in codice e chiamare encode direttamente con un Uint8Array al suo posto. Il pannello JSON copre il 90% dei casi in cui i tuoi dati sono già a forma di JSON.
Qual è la differenza tra output in hex e in base64?
Sono due modi di scrivere gli stessi byte come testo. Hex sono due caratteri per byte (quindi 0x82 diventa la stringa "82") — utile per leggere a occhio i byte di tipo della spec. Base64 sono quattro caratteri ogni tre byte secondo la RFC 4648 — più denso, ed è il modo standard di incorporare binario in JSON, JWT o header HTTP. Scegli quello che si adatta al posto in cui incolli l'output.
msgpack è davvero più veloce di JSON, o solo più piccolo?
Più piccolo è di solito il guadagno più grosso. Sulla velocità di codifica/decodifica, il JSON.parse moderno è così ottimizzato che msgpack pareggia o vince solo del 10-20% in JS. Il vantaggio della serializzazione si vede a valle: payload più piccoli significa meno tempo di rete e meno lavoro per il ricevitore se è in un linguaggio in cui il parsing JSON costa più del parsing msgpack (parlo con te, Python). Regola empirica: scegli msgpack se il collo di bottiglia è la banda o lo storage; resta su JSON se sono leggibilità e tooling.
Altri strumenti MessagePack
La codifica è una direzione. Questi coprono il resto del giro: