JSON naar MessagePack
Codeer JSON naar MessagePack in je browser. Output als base64 of hex, klaar om te plakken in een WebSocket-frame, een Redis-waarde of een HTTP-body.
Invoer
Uitvoer
Wat is JSON naar MessagePack?
Je hebt een JSON-config die straks over een krap WebSocket-budget moet — MessagePack krimpt het 30-60% kleiner dan dezelfde payload als JSON, en wel zonder dat schemaless "het is gewoon een object"-gevoel op te geven dat JSON zo prettig maakt om mee te werken. Deze pagina codeert de JSON die je links plakt rechts naar een msgpack-bytestream, standaard geserveerd als base64 en met één klik om te schakelen naar hex.
De codering draait volledig in je browser via de officiële @msgpack/msgpack-library, dus de JSON verlaat het tabblad nooit. Onder de motorkap parsen we de input met JSON.parse (dezelfde parser die de JSON-RFC beschrijft), geven het resulterende object door aan msgpackEncode, en zetten de teruggegeven Uint8Array om naar een transportvriendelijke string — base64 (volgens RFC 4648) of hex in kleine letters.
Pak base64 als je de bytes inbedt in JSON, een HTTP-header of een databasekolom. Pak hex als je een sample byte voor byte vergelijkt met de msgpack-wirespec of een serverlog. Dezelfde bytes, andere weergave.
Zo gebruik je de JSON-naar-MessagePack-encoder
Drie stappen. De conversie loopt automatisch terwijl je typt — geen knop nodig.
Plak JSON of laad het voorbeeld
Drop je JSON in de linker editor. Klik op Voorbeeld-JSON voor een kleine bestelling-payload die de cases dekt die ertoe doen — strings, integers, floats en een geneste array. De encoder behandelt de input volgens het standaard typesysteem van MessagePack: integers krijgen de kleinste passende vorm fixint/int8/int16/int32/int64, floats worden float64, strings krijgen fixstr/str8/16/32 op basis van lengte, arrays gebruiken fixarray/array16/32 en maps fixmap/map16/32. Voorbeeldinvoer:
{
"orderId": "ORD-7421",
"items": [{ "sku": "SKU-101", "qty": 2 }],
"total": 89.50
}Een JSON van 90 byte zoals deze codeert doorgaans naar ~55 byte msgpack — een derde kleiner, nog vóórdat je er een gzip-laag overheen legt.
Wissel tussen hex en base64
Het outputformaat staat standaard op base64, want dat is wat je meestal in een config plakt of over de lijn stuurt. Klik op Hex-output om over te schakelen naar hex in kleine letters als je een diff doet tegen een server-side encoder of de typebytes met het oog wilt nalopen (bijv. 0x82 voor een fixmap van 2). Wissel zo vaak je wilt — de onderliggende bytes blijven hetzelfde.
Kopiëren en versturen
Klik op Kopiëren om de output op je klembord te zetten. Plak het direct in een Redis-SET, een WebSocket-tekstframe, een HTTP-body met Content-Type: application/x-msgpack of een Postgres-bytea-kolom (eerst de base64 decoderen). Voor de andere richting plak je het in onze MessagePack naar JSON-pagina.
Wanneer ga je dit echt gebruiken
WebSocket-frames krimpen
Real-time apps met druk gebabbel per seconde voelen het verschil in grootte. Een positie-update of order book-tick van 220 byte als JSON zakt naar ~140 byte als msgpack — over duizenden frames per seconde tikt dat aan. Converteer hier één voorbeeldbericht, plak de bytes in je test harness en controleer of de ontvanger ze op dezelfde manier decodeert.
Cachewaarden inpakken
Caches als Redis rekenen je af op elke opgeslagen byte en elke gelezen byte. Cache-objecten als msgpack coderen in plaats van als JSON-stringified tekst scheelt opslag en netwerk bij elke hit. Gebruik deze pagina om vooraf te zien hoe een gegeven object er als bytes uitziet voordat je in je serializer voor een codering kiest.
Getypte getallen sturen
JSON heeft één numeriek type en behandelt 42 hetzelfde als 42.0. MessagePack maakt op de lijn onderscheid tussen integer en float — handig als de ontvanger een streng-getypte taal als Go, Rust of C# is en je niet via een string heen en terug wilt. Plak een JSON-getal en bekijk de typebyte in de hex-output om te bevestigen dat het als int en niet als float is gecodeerd.
Een decoder debuggen
Heb je een service die "msgpack zou moeten zijn" maar die de consumer doet stikken op de bytes? Codeer dezelfde JSON hier, vergelijk de output van je service met de onze in hex-modus byte voor byte, en het verschil vertelt je precies welk veld of welk type fout is. De referentie-encoder volgt de gepubliceerde spec letterlijk.
Veelgestelde vragen
Verlaat de JSON ooit mijn browser?
Nee. De JSON wordt geparsed door de ingebouwde JSON.parse van de browser, gecodeerd door de @msgpack/msgpack-library in client-side JavaScript en gerenderd als base64 of hex in het rechterpaneel — geen serveraanroep, geen telemetrie over de input, en niets wordt gelogd. Je kunt DevTools openen en zien dat het netwerk-tabblad rustig blijft terwijl je typt. Veilig voor proprietary configs en klantdata.
Waarom is de output groter dan ik verwachtte?
Meestal twee redenen. Ten eerste: base64 blaast het aantal bytes met zo'n 33% op — als je base64-msgpack rechtstreeks vergelijkt met JSON-tekst, vergelijk je niet de echte wire-grootte. Schakel over naar hex (dat blaast 2x op) of, beter, kijk naar de bytelengte: in DevTools geeft atob(output).length je de echte grootte. Ten tweede: msgpack wint pas van JSON als de data veel getallen, booleans of herhaalde korte strings bevat. Een blob die voor 90% bestaat uit lange unieke strings is in beide formaten ongeveer even groot.
Hoe worden integers, floats en grote getallen behandeld?
JavaScripts JSON.parse maakt van elk getal een 64-bit float, dus tegen de tijd dat de data bij de encoder aankomt, is het int-vs-float-onderscheid al weg. De library gaat hier verstandig mee om: een waarde die geheel is en binnen safe-int valt, wordt als int gecodeerd (in de kleinste passende variant — fixint, int8, int16, int32 of int64). Alles anders wordt float64. Heb je exacte 64-bit ints nodig (zoals Snowflake-IDs)? Stuur ze als string door je JSON heen en converteer ze aan de ontvangerkant.
Kan ik hier binaire blobs (zoals filebytes) mee coderen?
Direct via JSON niet — JSON heeft geen bin-type, dus een Uint8Array maakt door deze UI een ronde als base64-string en wordt opnieuw gecodeerd als msgpack-str, niet als bin. Heb je echte msgpack-bin- of ext-types nodig (de twee grote msgpack-only-features), dan moet je het object in code bouwen en encode rechtstreeks aanroepen met een Uint8Array erin. Het JSON-paneel is voor de 90% van gevallen waarin je data al JSON-vormig is.
Wat is het verschil tussen hex- en base64-output?
Het zijn twee manieren om dezelfde bytes als tekst op te schrijven. Hex is twee tekens per byte (dus 0x82 wordt de string "82") — handig om de typebytes uit de spec met het oog te lezen. Base64 is vier tekens per drie bytes volgens RFC 4648 — dichter, en de standaardmanier om binair in JSON, JWT's of HTTP-headers in te bedden. Kies wat past bij de plek waar je de output gaat plakken.
Is msgpack echt sneller dan JSON, of gewoon kleiner?
Kleiner is meestal de grootste winst. Qua codeer-/decodeersnelheid is moderne JSON.parse zo geoptimaliseerd dat msgpack in JS gelijkspeelt of maar 10-20% wint. Het serialisatievoordeel zie je verderop in de keten: kleinere payloads betekenen minder netwerktijd en minder werk voor de ontvanger als die in een taal draait waar JSON-parsen duurder is dan msgpack-parsen (jij weer, Python). Vuistregel: kies msgpack als de bottleneck bandbreedte of opslag is; blijf bij JSON als het leesbaarheid en tooling is.
Andere MessagePack-tools
Coderen is één richting. Deze dekken de rest van de heen-en-terug: