JSON til MessagePack
Kod JSON til MessagePack i nettleseren. Utdata som base64 eller hex, klart til å slenge inn i en WebSocket-frame, en Redis-verdi eller en HTTP-body.
Inndata
Utdata
Hva er JSON til MessagePack?
Du har en JSON-config som straks skal sendes over et trangt WebSocket-budsjett — MessagePack krymper den 30-60 % sammenlignet med samme payload som JSON, og det uten å gi slipp på den schemaløse «det er bare et objekt»-følelsen som gjør JSON behagelig å jobbe med. Denne siden koder JSON-en du limer inn til venstre til en msgpack-bytestrøm til høyre, servert som base64 by default og byttbar til hex med ett klikk.
Kodingen kjører helt i nettleseren din via det offisielle @msgpack/msgpack-biblioteket, så JSON-en forlater aldri fanen. Under panseret parser vi inputet med JSON.parse (samme parser som JSON-RFC-en beskriver), gir det resulterende objektet til msgpackEncode, og gjør den returnerte Uint8Array-en om til en transportvennlig streng — base64 (etter RFC 4648) eller hex med små bokstaver.
Bruk base64 når du legger bytene inn i JSON, en HTTP-header eller et databasefelt. Bruk hex når du sammenligner et sample byte for byte mot msgpacks wire-spec eller en serverlogg. Samme bytes, annen visning.
Slik bruker du JSON-til-MessagePack-koderen
Tre steg. Konverteringen kjører automatisk mens du skriver — ingen knapp å klikke.
Lim inn JSON eller last eksempelet
Slipp JSON-en din i editoren til venstre. Trykk på Eksempel-JSON for en liten ordrepayload som dekker casene som teller — strenger, heltall, flyttall og en nøstet array. Koderen behandler inputet etter MessagePack sitt standard typesystem: heltall får den minste passende formen fixint/int8/int16/int32/int64, flyttall blir float64, strenger blir fixstr/str8/16/32 etter lengde, arrayer bruker fixarray/array16/32 og maps bruker fixmap/map16/32. Eksempel på input:
{
"orderId": "ORD-7421",
"items": [{ "sku": "SKU-101", "qty": 2 }],
"total": 89.50
}En 90 byte stor JSON som denne koder typisk ned til ~55 bytes msgpack — en tredjedel mindre, før du i det hele tatt legger på et gzip-lag.
Bytt mellom hex og base64
Utdataformatet er base64 by default, fordi det er det du vanligvis limer inn i en config eller sender over linja. Klikk på Hex-utdata for å bytte til hex med små bokstaver hvis du diff-er mot en koder på serversiden eller ser på typebytes med øyet (f.eks. 0x82 for et fixmap med 2 elementer). Bytt så mange ganger du vil — bytene under er de samme.
Kopier og send
Trykk på Kopier for å legge utdataen i utklippstavlen. Slipp bytene rett inn i et Redis-SET, en WebSocket-tekstframe, en HTTP-body med Content-Type: application/x-msgpack eller en Postgres-bytea-kolonne (dekod base64 først). Andre veien — lim inn på siden vår MessagePack til JSON.
Når du faktisk kommer til å bruke dette
Krymp WebSocket-frames
Sanntidsapper med pratsomme oppdateringer per sekund kjenner størrelsesforskjellen. En posisjonsoppdatering eller et order book-tick på 220 bytes som JSON faller til ~140 bytes som msgpack — på tvers av tusenvis av frames per sekund summerer det seg. Konverter en eksempelmelding her, lim bytene inn i testriggen din og verifiser at mottakeren dekoder dem på samme måte.
Pakk cache-verdier
Cacher som Redis tar betalt for hver byte du lagrer og hver byte du leser. Å kode cachede objekter som msgpack i stedet for JSON-stringifisert tekst sparer lagring og nettverk på hvert hit. Bruk denne siden til å sjekke hvordan et bestemt objekt ser ut som bytes før du fester kodingen i serializeren din.
Sende typede tall
JSON har bare én numerisk type og behandler 42 akkurat som 42.0. MessagePack skiller mellom heltall og float på linja — nyttig når mottakeren er et sterkt typet språk som Go, Rust eller C# og du ikke vil ta turen om en streng. Lim inn et JSON-tall og se på typebyten i hex-utdataen for å bekrefte at det ble kodet som int og ikke float.
Debugge en dekoder
Har du en tjeneste som «skulle» være msgpack, men forbrukeren kveles av bytene? Kod den samme JSON-en her, sammenlign tjenestens utdata med vår byte for byte i hex-modus, og avviket forteller deg nøyaktig hvilket felt eller hvilken type som er feil. Referansekoderen følger den publiserte specen til punkt og prikke.
Vanlige spørsmål
Forlater JSON-en noensinne nettleseren min?
Nei. JSON parses av nettleserens innebygde JSON.parse, kodes av @msgpack/msgpack-biblioteket i klient-side JavaScript og rendres som base64 eller hex i høyrepanelet — ingen serverkall, ingen telemetri på inputet, og ingenting logges. Du kan åpne DevTools og selv se at Network-fanen er stille mens du skriver. Trygt for proprietære configer og kundedata.
Hvorfor er utdataen større enn jeg trodde?
Som regel to grunner. For det første: base64 blåser opp byte-antallet med rundt 33 % — hvis du sammenligner base64-msgpack direkte med JSON-tekst, sammenligner du ikke den reelle wire-størrelsen. Bytt til hex (det blåser opp 2x) eller, enda bedre, se på byte-lengden: i DevTools gir atob(output).length deg den faktiske størrelsen. For det andre: msgpack slår JSON kun når dataene har mange tall, booleans eller gjentatte korte strenger. En blob som består av 90 % lange, unike strenger blir omtrent like stor i begge formater.
Hvordan håndteres heltall, flyttall og store tall?
JavaScripts JSON.parse gjør hvert tall om til en 64-bits float, så når dataene når koderen har vi allerede mistet skillet mellom int og float. Biblioteket håndterer dette fornuftig: en verdi som er heltallig og innenfor safe-int-området kodes som int (i den minste passende varianten — fixint, int8, int16, int32 eller int64). Resten kodes som float64. Trenger du eksakte 64-bits ints (som Snowflake-ID-er), send dem gjennom JSON som strenger og konverter på mottakersiden.
Kan jeg kode binære blobs (som filbytes) med dette?
Ikke direkte gjennom JSON, nei — JSON har ingen bin-type, så en Uint8Array tar en tur gjennom dette UI-et som en base64-streng og kodes på nytt som en msgpack-str, ikke som en bin. Trenger du ekte msgpack-bin- eller ext-typer (de to store msgpack-eksklusive funksjonene), må du bygge objektet i kode og kalle encode direkte med en Uint8Array i. JSON-ruten er for de 90 % av tilfellene der dataene allerede har JSON-form.
Hva er forskjellen på hex- og base64-utdata?
To måter å skrive de samme bytene som tekst. Hex er to tegn per byte (så 0x82 blir til strengen "82") — bra for å lese typebytes fra specen med øyet. Base64 er fire tegn per tre bytes etter RFC 4648 — tettere, og standardmåten å embedde binært i JSON, JWT-er eller HTTP-headere. Velg det som passer der du limer inn utdataen.
Er msgpack faktisk raskere enn JSON, eller bare mindre?
Mindre er som regel den største gevinsten. På encode-/decode-fart er moderne JSON.parse så optimalisert at msgpack går jevnt opp eller bare vinner 10-20 % i JS. Serialiseringsgevinsten dukker opp lengre ned: mindre payloads betyr mindre nettverkstid og mindre arbeid for mottakeren hvis den er i et språk der JSON-parsing koster mer enn msgpack-parsing (ja, jeg ser på deg, Python). Tommelfingerregel: velg msgpack hvis flaskehalsen er båndbredde eller lagring; bli i JSON hvis det er lesbarhet og verktøy.
Andre MessagePack-verktøy
Koding er én retning. Disse dekker resten av tur-retur: