Input

Output

Hvad er JSON til MessagePack?

Du har en JSON-config, der lige om lidt skal sendes over en stram WebSocket-budget — MessagePack presser den 30-60 % mindre end den samme payload som JSON, og det uden at give køb på den schemaløse „det er bare et objekt"-fornemmelse, der gør JSON rart at arbejde med. Denne side koder den JSON, du indsætter til venstre, til en msgpack-bytestream til højre — som standard som base64 og skiftbar til hex med ét klik.

Kodningen kører helt i din browser via det officielle @msgpack/msgpack-bibliotek, så JSON forlader aldrig fanen. Under motorhjelmen parser vi inputtet med JSON.parse (den parser, som JSON-RFC'en beskriver), giver det resulterende objekt videre til msgpackEncode og laver den returnerede Uint8Array om til en transportvenlig streng — base64 (efter RFC 4648) eller hex med små bogstaver.

Brug base64, når du indlejrer bytene i JSON, en HTTP-header eller et databasefelt. Brug hex, når du sammenligner et sample byte for byte mod msgpacks wire-spec eller en serverlog. Samme bytes, anden visning.

Sådan bruger du JSON-til-MessagePack-koderen

Tre trin. Konverteringen kører automatisk, mens du skriver — ingen knap at trykke på.

1

Indsæt JSON eller hent eksemplet

Smid din JSON i editoren til venstre. Tryk på Eksempel-JSON for en lille ordre-payload, der dækker de cases, der betyder noget — strenge, heltal, flydende tal og et nested array. Koderen behandler inputtet efter MessagePack's standard typesystem: heltal får den mindste passende form fixint/int8/int16/int32/int64, flydende tal bliver float64, strenge får fixstr/str8/16/32 efter længde, arrays bruger fixarray/array16/32 og maps bruger fixmap/map16/32. Eksempel på input:

{
  "orderId": "ORD-7421",
  "items": [{ "sku": "SKU-101", "qty": 2 }],
  "total": 89.50
}

En 90-byte JSON som denne koder typisk ned til ~55 bytes msgpack — en tredjedel mindre, før du overhovedet lægger et gzip-lag ovenpå.

2

Skift mellem hex og base64

Outputformatet er base64 som standard, fordi det er det, du som regel indsætter i en config eller sender over ledningen. Klik på Hex-output for at skifte til hex med små bogstaver, hvis du diff'er mod en server-side koder eller læser typebytes med øjet (fx 0x82 for et fixmap med 2 elementer). Skift så mange gange du vil — bytene under er de samme.

3

Kopiér og send

Tryk på Kopiér for at lægge outputtet i udklipsholderen. Smid bytene direkte i et Redis-SET, en WebSocket-tekstframe, en HTTP-body med Content-Type: application/x-msgpack eller en Postgres-bytea-kolonne (afkod base64 først). Den anden vej rundt — indsæt på vores side MessagePack til JSON.

Hvornår du faktisk vil bruge det her

Krymp WebSocket-frames

Realtidsapps med snakkende sekundvise opdateringer kan mærke størrelsesforskellen. En positions-opdatering eller order book-tick på 220 bytes som JSON falder til ~140 bytes som msgpack — på tværs af tusindvis af frames i sekundet løber det op. Konvertér en eksempelbesked her, indsæt bytene i din testopstilling og bekræft, at modtageren afkoder dem på samme måde.

Pak cache-værdier

Caches som Redis afregner dig for hver byte gemt og hver byte læst. At kode cachede objekter som msgpack i stedet for JSON-stringificeret tekst sparer storage og netværk ved hvert hit. Brug denne side til at lave et stikprøvecheck på, hvordan et givet objekt ser ud som bytes, før du fastlåser kodningen i din serializer.

Send tal med type

JSON har ét numerisk type og behandler 42 præcis som 42.0. MessagePack skelner mellem heltal og float på ledningen — nyttigt, når modtageren er et stærkt typet sprog som Go, Rust eller C#, og du ikke gider gå om ad en streng. Indsæt et JSON-tal og kig på typebyten i hex-outputtet for at bekræfte, at det blev kodet som int og ikke som float.

Debug en decoder

Har du en service, der „burde" være msgpack, men forbrugeren brækker sig over bytene? Kod den samme JSON her, sammenlign din services output med vores byte for byte i hex-tilstand, og afvigelsen siger dig præcis, hvilket felt eller hvilken type, der er forkert. Reference-koderen følger den udgivne spec til punkt og prikke.

Ofte stillede spørgsmål

Forlader JSON nogensinde min browser?

Nej. JSON parses af browserens indbyggede JSON.parse, kodes af @msgpack/msgpack-biblioteket i client-side JavaScript og renderes som base64 eller hex i højre rude — intet serverkald, ingen telemetri på inputtet og intet logges. Du kan åbne DevTools og selv se, at Network-fanen er stille, mens du skriver. Trygt for proprietære configs og kundedata.

Hvorfor er outputtet større end jeg ventede?

Som regel to grunde. For det første: base64 puster byte-antallet op med omkring 33 % — hvis du sammenligner base64-msgpack direkte med JSON-tekst, sammenligner du ikke den faktiske wire-størrelse. Skift til hex (det puster op 2x) eller, endnu bedre, kig på byte-længden: i DevTools giver atob(output).length dig den rigtige størrelse. For det andet: msgpack slår kun JSON, når dataene har masser af tal, booleans eller gentagne korte strenge. En blob, der består af 90 % lange, unikke strenge, ender omtrent lige stor i begge formater.

Hvordan håndteres heltal, floats og store tal?

JavaScripts JSON.parse laver hvert tal om til en 64-bit float, så når dataene når koderen, har vi allerede mistet skellet mellem int og float. Biblioteket er fornuftigt omkring det: en værdi, der er heltal og inden for safe-int-intervallet, kodes som int (i den mindste passende variant — fixint, int8, int16, int32 eller int64). Resten kodes som float64. Hvis du har brug for præcise 64-bit ints (fx Snowflake-ID'er), så send dem gennem JSON som strenge og konvertér på modtagersiden.

Kan jeg kode binære blobs (fx filbytes) med det her?

Ikke direkte via JSON, nej — JSON har ingen bin-type, så en Uint8Array tager en tur gennem dette UI som en base64-streng og kodes igen som en msgpack-str, ikke en bin. Hvis du har brug for ægte msgpack-bin- eller ext-typer (de to store msgpack-eksklusive features), må du bygge objektet i kode og kalde encode direkte med et Uint8Array i. JSON-ruden er til de 90 % af tilfældene, hvor dine data allerede er JSON-formede.

Hvad er forskellen på hex- og base64-output?

To måder at skrive de samme bytes som tekst på. Hex er to tegn pr. byte (så 0x82 bliver til strengen "82") — godt til at læse specens typebytes med øjet. Base64 er fire tegn pr. tre bytes efter RFC 4648 — tættere, og standardmåden at indlejre binært i JSON, JWT'er eller HTTP-headers på. Vælg det, der passer til, hvor du indsætter outputtet.

Er msgpack faktisk hurtigere end JSON, eller bare mindre?

Mindre er som regel den største gevinst. På encode-/decode-hastighed er moderne JSON.parse så optimeret, at msgpack går lige op eller kun vinder 10-20 % i JS. Serialiseringsgevinsten viser sig længere nede: mindre payloads betyder mindre netværkstid og mindre arbejde for modtageren, hvis den kører i et sprog, hvor JSON-parsing koster mere end msgpack-parsing (jeg ser på dig, Python). Tommelfingerregel: vælg msgpack, hvis flaskehalsen er båndbredde eller storage; bliv ved JSON, hvis det er læsbarhed og værktøjer.

Andre MessagePack-værktøjer

Kodning er én retning. Disse dækker resten af turen frem og tilbage: