JSON till MessagePack
Koda JSON till MessagePack i webbläsaren. Utdata som base64 eller hex, redo att klistras in i en WebSocket-frame, ett Redis-värde eller en HTTP-body.
Indata
Utdata
Vad är JSON till MessagePack?
Du har en JSON-config som ska iväg över en snäv WebSocket-budget — MessagePack krymper den 30-60 % jämfört med samma payload som JSON, och det utan att tappa den schemalösa „det är bara ett objekt"-känslan som gör JSON skön att jobba med. Den här sidan kodar det JSON du klistrar in till vänster till en msgpack-bytström till höger, serverat som base64 by default och bytbart till hex med ett klick.
Kodningen sker helt i din webbläsare via det officiella biblioteket @msgpack/msgpack, så JSON lämnar aldrig fliken. Under huven parsar vi indatan med JSON.parse (samma parser som JSON-RFC:n beskriver), skickar resultatobjektet till msgpackEncode och förvandlar den returnerade Uint8Array:en till en transportvänlig sträng — base64 (enligt RFC 4648) eller hex med små bokstäver.
Använd base64 när du bäddar in bytena i JSON, en HTTP-header eller ett databasfält. Använd hex när du jämför ett sample byte för byte mot msgpacks wire-spec eller en serverlogg. Samma bytes, annan rendering.
Så använder du JSON-till-MessagePack-kodaren
Tre steg. Konverteringen sker automatiskt medan du skriver — ingen knapp att klicka.
Klistra in JSON eller ladda exemplet
Släpp din JSON i editorn till vänster. Tryck på Exempel-JSON för en liten orderpayload som täcker fallen som spelar roll — strängar, heltal, flyttal och en nästlad array. Kodaren behandlar indatan enligt MessagePack:s standardtypsystem: heltal får den minsta passande formen fixint/int8/int16/int32/int64, flyttal blir float64, strängar blir fixstr/str8/16/32 efter längd, arrayer använder fixarray/array16/32 och maps använder fixmap/map16/32. Exempel på indata:
{
"orderId": "ORD-7421",
"items": [{ "sku": "SKU-101", "qty": 2 }],
"total": 89.50
}En 90 byte stor JSON som denna kodar typiskt ner till ~55 byte msgpack — en tredjedel mindre, innan du ens lägger på ett gzip-lager.
Växla mellan hex och base64
Utdataformatet är base64 by default, eftersom det är vad du oftast klistrar in i en config eller skickar över ledningen. Klicka på Hex-utdata för att byta till hex med små bokstäver om du diffar mot en serversida-kodare eller läser typ-bytes med ögat (t.ex. 0x82 för en fixmap med 2 element). Växla hur många gånger du vill — bytena under är desamma.
Kopiera och skicka
Tryck på Kopiera för att lägga utdata i urklipp. Häll det rakt in i ett Redis-SET, en WebSocket-textframe, en HTTP-body med Content-Type: application/x-msgpack eller en Postgres-bytea-kolumn (avkoda base64 först). Andra hållet — klistra in på vår sida MessagePack till JSON.
När du faktiskt kommer använda det här
Krympa WebSocket-frames
Realtidsappar med pratiga uppdateringar varje sekund känner storleksskillnaden. En positionsuppdatering eller orderbok-tick som är 220 byte som JSON faller till ~140 byte som msgpack — över tusentals frames per sekund summerar det. Konvertera ett provmeddelande här, klistra in bytena i din testrigg och verifiera att mottagaren avkodar dem på samma sätt.
Packa cache-värden
Cacher som Redis tar betalt för varje lagrad byte och varje läst byte. Att koda cachade objekt som msgpack i stället för JSON-stringifierad text sparar lagring och nätverk vid varje hit. Använd den här sidan för att stickprov-kolla hur ett givet objekt ser ut som bytes innan du låser kodningen i din serializer.
Skicka typade tal
JSON har ett enda numeriskt typ och behandlar 42 precis som 42.0. MessagePack skiljer mellan heltal och flyttal på ledningen — användbart när mottagaren är ett starkt typat språk som Go, Rust eller C# och du inte vill gå genom en sträng. Klistra in ett JSON-tal och titta på typ-byten i hex-utdatan för att bekräfta att det kodades som int, inte float.
Felsöka en avkodare
Har du en tjänst som „borde" vara msgpack, men konsumenten kvävs av bytena? Koda samma JSON här, jämför din tjänsts utdata med vår byte för byte i hex-läge, så säger avvikelsen exakt vilket fält eller vilken typ som är fel. Referenskodaren följer den publicerade specen exakt.
Vanliga frågor
Lämnar JSON någonsin min webbläsare?
Nej. JSON parsas av webbläsarens inbyggda JSON.parse, kodas av @msgpack/msgpack-biblioteket i klient-side JavaScript och renderas som base64 eller hex i högerpanelen — inget serveranrop, ingen telemetri på indatan och inget loggas. Du kan öppna DevTools och själv se att Network-fliken är tyst medan du skriver. Säkert för proprietära configs och kunddata.
Varför är utdata större än jag väntade mig?
Vanligen två orsaker. För det första: base64 blåser upp byte-antalet med ungefär 33 % — om du jämför base64-msgpack direkt mot JSON-text jämför du inte den verkliga wire-storleken. Byt till hex (det blåser upp 2x) eller, ännu bättre, titta på byte-längden: i DevTools ger atob(output).length dig den riktiga storleken. För det andra: msgpack slår JSON bara när datan har gott om tal, booleans eller upprepade korta strängar. En blob som till 90 % består av långa unika strängar blir ungefär lika stor i båda formaten.
Hur hanteras heltal, flyttal och stora tal?
JavaScripts JSON.parse gör om varje tal till en 64-bitars float, så när datan kommer fram till kodaren har vi redan tappat skillnaden int kontra float. Biblioteket är vettigt med detta: ett värde som är heltal och inom safe-int-intervallet kodas som int (i den minsta passande varianten — fixint, int8, int16, int32 eller int64). Allt annat kodas som float64. Behöver du exakta 64-bitars int (typ Snowflake-ID), skicka dem som strängar i JSON och konvertera på mottagarsidan.
Kan jag koda binära blobbar (typ filbytes) med det här?
Inte direkt via JSON, nej — JSON har ingen bin-typ, så en Uint8Array tar en tur genom det här UI:t som base64-sträng och kodas om som ett msgpack-str, inte ett bin. Behöver du riktiga msgpack-typer bin eller ext (de två stora msgpack-exklusiva funktionerna), måste du bygga objektet i kod och anropa encode direkt med en Uint8Array i. JSON-rutan är till för 90 %-fallet där datan redan är JSON-formad.
Vad är skillnaden mellan hex- och base64-utdata?
Två sätt att skriva samma bytes som text. Hex är två tecken per byte (alltså blir 0x82 strängen "82") — bra för att läsa specens typ-bytes med ögat. Base64 är fyra tecken per tre bytes enligt RFC 4648 — tätare och standardvägen att bädda in binärt i JSON, JWT eller HTTP-headers. Välj det som passar där du klistrar in utdatan.
Är msgpack faktiskt snabbare än JSON, eller bara mindre?
Mindre är oftast den större vinsten. På kodnings-/avkodningshastighet är moderna JSON.parse så optimerad att msgpack går jämnt eller bara vinner med 10-20 % i JS. Serialisationsvinsten visar sig längre ner: mindre payloads betyder mindre nätverkstid och mindre jobb för mottagaren om den körs i ett språk där JSON-parsning kostar mer än msgpack-parsning (jag pekar på dig, Python). Tumregel: välj msgpack om flaskhalsen är bandbredd eller lagring; stanna i JSON om det är läsbarhet och verktyg.
Andra MessagePack-verktyg
Kodning är ett håll. De här täcker resten av tur och retur: