Przeglądarka MessagePack
Wklej blob MessagePack jako hex lub base64 i czytaj go jako JSON. Sami wykrywamy kodowanie, dekodujemy w przeglądarce, bez wysyłania.
Co robi przeglądarka MessagePack
Jeśli kiedyś wpatrywałeś się w blob hex w logu Cloudflare Workera, zastanawiając się, co tam właściwie jest w środku, ta strona jest do tego. MessagePack to binarny format serializacji, który produkuje coś w stylu 83a76f72646572496478a84f52442d37343231... — kompaktowy w transmisji, kompletnie nieczytelny gołym okiem. Wklejasz hex (albo base64 — wykrywamy sami) w lewy panel, a prawy pokazuje zdekodowane drzewo JSON.
Dekodowanie idzie lokalnie z oficjalną biblioteką @msgpack/msgpack, tą samą, której używa większość aplikacji Node i przeglądarkowych. Format trzyma się publicznej specyfikacji wire-format MessagePack, więc każdy payload wygenerowany przez msgpack-python, msgpack-c, msgpack-java czy inną zgodną implementację działa tutaj. Nie ma kroku z uploadem — bajty nigdy nie wychodzą z twojej przeglądarki, co ma znaczenie, gdy blob ma w sobie coś typu customer: 'Ava Chen' albo wewnętrzne subscriberId: 'SUB-1001'.
Dekodowanie ma debounce 300ms, więc możesz wkleić, edytować i wkleić od nowa, nie klikając nic. Bez przycisku Konwertuj, bez spinnera — piszesz i czytasz.
Jak obejrzeć payload MessagePack
Trzy kroki. Działa dla ciągów hex skopiowanych z logu, pól base64 wyciągniętych z wiadomości Kafka albo surowych bajtów wklejonych z debuggera.
Wklej hex lub base64 w lewy panel
Wrzuć zakodowany MessagePack do lewego edytora. Wykrywamy sami: jeśli parsuje się czysto jako hex (po wycięciu białych znaków, przecinków, prefiksów 0x i escape’ów \x), traktujemy jak hex; w przeciwnym razie próbujemy base64 (RFC 4648). Każda forma jest w porządku. Przykład zamówienia w hex:
83a76f72646572496478a84f52442d37343231a56974656d739282a3736b75a7534b552d313031a37174790282a3736b75a7534b552d323434a37174790182a8637573746f6d6572a841766120436865 6eTen blob dekoduje się do zamówienia z dwiema pozycjami (SKU-101 x2 i SKU-244 x1) dla klienta Ava Chen.
Czytaj zdekodowany JSON po prawej
Prawy panel jest tylko do odczytu i pokazuje zdekodowany payload jako sformatowany JSON — to samo wcięcie co JSON.stringify(obj, null, 2). Mapy renderują się jako obiekty, tablice jako tablice, int/float jako liczby, a binarne bloby przychodzą jako Uint8Array z widoczną długością w bajtach. Znaczniki czasu z typu rozszerzenia timestamp pokazują się jako stringi ISO.
Iteruj bez klikania
Edytujesz wejście, JSON aktualizuje się po pauzie 300ms. Jeśli bajty to nie jest poprawny MessagePack, mówimy, co poszło nie tak (obcięty bufor, nieoczekiwany bajt typu itd.) zamiast udawać, że sparsował. Użyj przycisku Przykładowy msgpack, żeby załadować znany payload Order do porównania.
Kiedy faktycznie tego użyjesz
Inspekcja wiadomości MessagePack w logu
Twoja usługa wpisuje payloady kodowane msgpackiem do logu strukturalnego jako hex (w wielu przypadkach krótszy niż base64). Gdy coś się sypie na produkcji, kopiujesz hex z linii logu, wklejasz tutaj i od razu widzisz, co producent naprawdę wysłał — orderId ORD-7421, właściwe pozycje, błędne pole customer, cokolwiek to jest.
Debug payloadu z Redis lub Kafki
Wiele backendów na ścieżkach gorących używa MessagePacka zamiast JSON, bo jest 30-50% mniejszy i szybszy w parsowaniu. Gdy wyciągasz wartość z Redisa albo zaglądasz do topiku Kafka przez kcat -e, bajty wychodzą jako base64. Wklej je tutaj, żeby potwierdzić, że konsument i producent są zgodni co do schematu.
Weryfikacja round-tripów między językami
Kodujesz w Pythonie przez msgpack.packb(...) i dekodujesz w Go przez msgpack.Unmarshal(...). Gdy strona Go widzi zły typ, zrzuć bajty z Pythona jako hex i przepuść je przez ten viewer — to mówi, czy bug siedzi w enkoderze czy dekoderze, zanim spędzisz nad tym całe popołudnie kłócąc się.
Czytanie MessagePacka z zapisanego pliku
Masz plik <code>.msgpack</code> z eksportu Jupyter notebooka, save’a z gry albo analitycznego dumpa. Odpal na nim <code>xxd -p</code>, żeby dostać hex, wklej, czytaj. Szybciej niż zaprzęgać bibliotekę w świeżym REPL Pythona tylko po to, żeby zobaczyć, jak wygląda jeden rekord.
Częste pytania
Czy moje dane wychodzą z przeglądarki?
Nie. Dekodowanie idzie w całości w tej karcie przy pomocy biblioteki @msgpack/msgpack dołączonej do strony. Brak fetcha, brak uploadu, brak telemetrii na bajtach. Zamykasz kartę, dane znikają. To powiedziawszy — traktuj pasek URL jak przestrzeń publiczną, nie wpisuj tam payloadu, a schowek wyczyść, jeśli były tam sekrety.
Mogę wkleić base64 zamiast hexa?
Tak. Viewer wykrywa sam: jeśli wejście parsuje się jako hex po wycięciu białych znaków, przecinków, prefiksów 0x i escape’ów \x z Pythona, traktujemy je jak hex; w przeciwnym razie próbujemy standardowego base64. Każda forma działa dla tego samego payloadu. Większość logów używa hexa dla krótkich wiadomości, a base64 dla większych.
Co dzieje się z polami binarnymi, znacznikami czasu i typami rozszerzeń?
Binarne (rodzina bin) dekodują się do Uint8Array i wypisują w drzewie JSON jako { "0": 134, "1": 12, ... } (bo standardowy JSON nie ma natywnego typu bajtowego — patrz dokumentacja Uint8Array na MDN). Znaczniki czasu z typu rozszerzenia timestamp dekodują się do natywnych obiektów Date, które serializują się do stringów ISO 8601. Inne typy rozszerzeń przychodzą jako tuple { type, data } — widzisz kod typu i surowe bajty.
Dlaczego zdekodowane wyjście różni się od tego, co wysłał mój serwer?
Dwóch zwykłych podejrzanych. Jeden: twoje wejście jest obcięte — obcinanie logów często ucina ostatnie bajty, a msgpack opiera się na polach z prefiksem długości, więc brakujący ogon produkuje niejasny błąd albo częściowe wyjście. Dwa: producent użył własnego typu rozszerzenia, którego odbiorca nie zna. Porównaj bajty z oficjalną specyfikacją, jeśli struktura wygląda na niemożliwą.
Czy zdekoduje ogromne payloady?
Kilka megabajtów hexa wkleja się bez problemu we współczesnych przeglądarkach. Powyżej tego edytor Ace po stronie wejścia zaczyna zwalniać — w tym momencie lepiej czytać plik bezpośrednio biblioteką w skrypcie Node’owym. Wąskim gardłem nie jest dekoder, tylko edytor.
Jak wyprodukować hex jak w przykładzie?
W Pythonie: import msgpack; msgpack.packb(obj).hex(). W JS: Array.from(encode(obj)).map(b => b.toString(16).padStart(2, '0')).join(''). W Go: fmt.Sprintf("%x", msgpack.Marshal(obj)). Większość języków ma jednoliniowiec; powstały hex wkleja się tutaj prosto.
Inne narzędzia MessagePack
Podgląd to jedna strona — te ogarniają pełny round-trip i pokrewne formaty: