Giriş

Çıkış

MessagePack'ten JSON'a nedir?

gRPC sidecar'ın istek gövdesini upuzun bir hex string olarak logluyor ve içinde ne olduğunu gerçekten görmen gerek. Ya da Redis, önceki servisin msgpack olarak sakladığı bir değeri döndürdü ve terminalin \x82\xa7orderId\xa8ORD-7421 gösteriyor. MessagePack kompakt bir ikili format — telde harika, log satırında okunmaz. Bu sayfa, hex veya base64 dump'ını alıp temsil ettiği JSON'u sana verir.

Çözme, resmi MessagePack wire-format spec'ini takip eder ve @msgpack/msgpack JavaScript kütüphanesini kullanır. Map'ler nesneye, array'ler array'e, int ve float'lar doğrudan JSON sayısına çözülür ve sonuç RFC 8259'a göre düzgünce biçimlendirilir. 0x önekli hex, \x escape’leri, boşluk veya virgüller — hepsi sorunsuz parse edilir. Girdin base64 ise (RFC 4648'e göre) onu otomatik algılarız.

Yükleme yok, backend yok, log yok. Çözme, tarayıcında düz bir Uint8Array olarak çalışır — sekmeyi kapat, byte'lar uçtu.

MessagePack'ten JSON'a nasıl kullanılır

Yapıştır, oku, kopyala. Convert düğmesi yok — sağ panel sen yazarken güncellenir, her tuşta tekrar tekrar koşmasın diye 300 ms debounce var.

1

Hex veya base64’ü yapıştır

MessagePack byte'larını sol editöre bırak. Her şey olur — saf hex (82a7...), boşluklu hex (82 a7 6f), \x escape'li Python byte literal’ları veya bir base64 blob. Gerçek bir nesneye çözülen sipariş takip payload’ını yüklemek için Örnek düğmesine bas.

82a76f72646572496441 4f52442d3734323120a574 6f74616c cb4056600000000000

O parça bir Order payload'ının parçası — orderId, total, items, customer. Çözüldükten sonra tüm yapıyı JSON olarak geri alırsın.

2

Sağdaki JSON’u oku

Sağ panel her değişiklikte yeniden çözer. Byte'lar geçerli MessagePack ise nesneyi görürsün. Kesilmişlerse, çöple doldurulmuşlarsa veya aslında başka bir formatsa (CBOR, BSON), panel parser hata mesajını gösterir — genelde girdinin neresinin yanlış olduğunu söylemeye yeter.

3

İhtiyacın olanı kopyala

JSON'u almak için çıktı tarafındaki Kopyala düğmesine bas. Bir unit test fixture'ına at, bir bug ticket'ına yapıştır veya farklı biçimlendirme istiyorsan JSON Formatlayıcı'ya gönder. Tersine gitmek için (nesne → msgpack), JSON’dan MessagePack’e kullan.

Bunu gerçekten ne zaman kullanırsın

Bir gRPC veya sidecar log gövdesini oku

Bir service-mesh sidecar'ı istek gövdelerini hex olarak dump'lar. Gövde msgpack çünkü yukarıdaki servis öyle serileştiriyor. Hex'i yapıştır, nesneyi gör, çağrının tahmin etmek yerine orderId: "ORD-7421" ve total: 89.50 taşıdığını öğren.

Bir Redis değerini incele

Yer kazanmak için Redis'e msgpack codec ile bir nesne kaydettin. Şimdi script yazmadan session:42'de ne olduğunu bilmek istiyorsun. GET çalıştır, değeri kopyala (çoğu istemci hex veya base64 gösterir), buraya yapıştır.

Bir cache girdisini çöz

Küçük payload'ları hedefleyen cache'ler — MessagePack, FlatBuffers, bazen ham protobuf — artık her yerde. Cache'lenmiş blob msgpack ise ve canlı JSON ile karşılaştırman gerekiyorsa, eşit koşullarda karşılaştırma için en hızlı yol bu.

Bir istemcinin ne gönderdiğini doğrula

Bant genişliğinden tasarruf için istek gövdesini msgpack ile encode eden bir mobil istemci yazdın. Bir regresyona denk geldin. Gerçek byte'ları yakala (Charles, mitmproxy, network sekmesi), yapıştır ve alan adlarıyla değerlerin sunucunun beklediği şemayla eşleştiğini doğrula. Müşteri Ava Chen, kalem SKU-101 × 2 — evet ya da hayır.

Sık sorulan sorular

Byte'larım bir yere yükleniyor mu?

Hayır. Çözme tamamen tarayıcındaki saf JavaScript — @msgpack/msgpack kütüphanesi girdini Uint8Array olarak okur, wire format'ı dolaşır ve sonuç nesnesini JSON olarak render eder. Fetch yok, girdi üzerinde analytics yok, sekmeden çıkan hiçbir şey yok. Yerel bir CLI aracı gibi düşün.

Hex mi base64 mü — hangisini yapıştırdığım fark eder mi?

İkisi de olur. Araç önce hex'i dener (çünkü 0x veya \x önekli, boşluklu, virgüllü hex en yaygın log şekli), girdi geçerli hex değilse base64'e geçer. Python'un b\'\x82\xa7order\' byte literal'i de çözülür — saran b\'...\' kabuğu çıkarılır ve escape’ler genişletilir.

Çıktıdaki zaman damgaları neden tuhaf görünüyor?

MessagePack'in yerleşik bir timestamp extension tipi var; kütüphane bunu JS Date'ine çözer. JSON'a stringify edilince ISO 8601 string'i olur. Çıktıda "2026-05-05T12:34:56.000Z" gibi bir string görüyorsan, encoder'ın gömdüğü gerçek bir zaman damgası — bug değil.

Girdi kısmen geçerliyse ne olur?

Çözücü wire format'ı byte byte okur. Bir uzunluk öneki “sonraki 16 byte'lık bir string” diyor ama yalnızca 8 byte kalmışsa, parse hatası fırlatır. Sağ paneldeki hata mesajı genelde hangi tip token'ın patladığını ve kabaca nerede olduğunu söyler — kesilmiş bir yapıştırmayı veya başıboş bir byte'ı bulmaya genelde yeter.

İkili blob’ları (bin ailesi) işleyebilir mi?

Evet. bin 8/bin 16/bin 32 değerleri Uint8Array örnekleri olarak döner. JSON'un yerleşik bir bytes tipi yok, bu yüzden stringify edildiklerinde {"0":1,"1":2,...} şeklinde render olurlar. bin alanları için özellikle base64 lazımsa, önce burada çöz, sonra JSON’dan Base64’e aracımızla dönüştür.

protobuf veya CBOR ile karşılaştırınca?

MessagePack şemasızdır (anahtarlar byte'ların içinde yaşar), CBOR benzer ama daha çok tipi ve farklı bir kodlaması var, protobuf ise çözmek için bile bir .proto şemasına ihtiyaç duyar. Byte'ların protobuf ise bu araç başarısız olur — onun yerine Protobuf’tan JSON’a sayfamızı dene. CBOR ise wire format yakın ama aynı değil, bu yüzden CBOR’a özel bir çözücü gerekir.

Diğer MessagePack araçları

Bununla iyi giden MessagePack araçları — ters yöne git, doğrula veya sadece byte'lara bak: