Wejście

Wyjście

Czym jest Walidator MessagePack?

Integrujesz się z usługą emitującą MessagePack, a format wire wciąż cię zaskakuje — zła liczba bajtów, dziwne bajty na końcu, parser umiera w sposób kryptyczny bez wskazówki, które pole padło. To narzędzie bierze hex lub base64 dump payloadu MsgPack, przepuszcza go przez prawdziwy dekoder i mówi ci, co naprawdę wyszło z drugiej strony.

Przepuszczamy twój input przez dekoder @msgpack/msgpack. Jeśli się parsuje, podajemy liczbę bajtów, typ najwyższego poziomu (map, array, string, int…) oraz długość kluczy lub tablicy, żebyś mógł zweryfikować to ze schematem, który masz w głowie. Jeśli się nie udaje, wyświetlamy komunikat błędu parsera dosłownie — zwykle wskazuje wprost na offset, który padł.

Hex i base64 są wykrywane automatycznie. Białe znaki, przecinki, prefiksy 0x oraz sekwencje \xNN są tolerowane, więc możesz wkleić bezpośrednio z przechwycenia Wiresharka, logu serwera lub pythonowego dumpa repr(). Nic nie opuszcza twojej przeglądarki — dekoder działa lokalnie.

Jak korzystać z Walidatora MessagePack

Wklej i tyle. Walidator uruchamia się przy każdym naciśnięciu klawisza (debounce 300 ms), więc nie musisz klikać żadnego przycisku.

1

Wklej hex lub base64 MsgPack

Wrzuć swój zakodowany payload do lewego panelu. Naciśnij Przykładowy MsgPack, aby załadować mały obiekt zamówienia zakodowany jako hex — przydatne, gdy chcesz po prostu zobaczyć, jak wygląda prawidłowy wynik. Dekoder podąża za specyfikacją MessagePack, więc wszystko, co wyprodukował zgodny encoder, przejdzie czysty round-trip. Przykładowy hex (pojedyncze int 1):

01

To bajt wire dla dodatniego fixint 1. Większe payloady — mapy, tablice, stringi — zaczynają się od bajtów formatu, takich jak 0x800x9f (fixmap/fixarray) lub 0xa00xbf (fixstr).

2

Przeczytaj raport walidacji

Prawy panel wypełnia się automatycznie. Przy sukcesie dostajesz mały raport — wykryty format wejściowy (hex lub base64 wg RFC 4648), liczba zakodowanych bajtów, typ najwyższego poziomu, liczba kluczy/elementów tablicy, plus podgląd JSON zdekodowanej wartości (skrócony do 2 KB, żeby panel pozostał czytelny).

3

Zbadaj niepowodzenia

Przy błędzie parsowania prawy panel pokazuje ✗ Invalid MessagePack, a dalej tekst błędu z dekodera. Typowe: "Insufficient bytes" (twój hex został przycięty), "Unrecognized type byte" (przez pomyłkę wkleiłeś JSON lub tekst, albo input jest uszkodzony) i "Extra bytes were found" (wśliznął się prefiks długości lub bajt framingu). Traktuj w głowie strumień bajtów jako Uint8Array — większość niepowodzeń to problemy z framingiem lub długością, nie bugi kodowania.

Kiedy faktycznie tego użyjesz

Debugowanie cache miss

Twój klucz Redis trzyma zamówienie zakodowane w MessagePack (orderId: 'ORD-7421', items, customer), a konsument rzuca wyjątkami przy deserializacji. Wklej hex z redis-cli --no-raw GET, sprawdź, czy format wire jest w ogóle prawidłowy, i potwierdź, że typ najwyższego poziomu zgadza się z tym, czego oczekuje twój dekoder.

Walidacja przechwycenia ruchu

Złapałeś frame z sieci za pomocą Wiresharka albo tcpdump, wyeksportowałeś bajty i chcesz wiedzieć, czy MsgPack w środku jest dobrze sformowany, zanim ręcznie prześledzisz framing. Wklej, rzuć okiem na typ i liczbę bajtów, jedź dalej.

Zdrowy rozsądek dla producenta

Napisałeś własny encoder w Go lub Rust? Zakoduj znaną fixture ({sku: 'SKU-101', qty: 2}), zrzuć jako hex i wklej tutaj. Jeśli odczytamy z powrotem tę samą mapę, którą zapisałeś, twój encoder jest zgodny z formatem MessagePack.

Pre-flight przed bug reportem

Otwierasz issue przeciwko upstreamowej bibliotece? Najpierw potwierdź, że payload to faktycznie prawidłowy MsgPack — połowa raportów typu "bug w bibliotece" to źle sformowany input. 30-sekundowe wklejenie tutaj oszczędza ci jednej rundy w tę i z powrotem.

Częste pytania

Czy payload opuszcza moją przeglądarkę?

Nie. Dekodowanie odbywa się w JavaScripcie na tej stronie z użyciem dekodera @msgpack/msgpack. Nic nie jest wgrywane, logowane ani wysyłane do backendu — zamknij kartę i dane znikają. Ten sam model, co desktopowy podgląd hex, tylko w przeglądarce.

Czy przyjmuje wgrywanie plików binarnych, czy tylko hex/base64?

Tylko hex i base64. Przeglądarki nie udostępniają stronie bajtów pliku bez file pickera, a większość workflowów copy-paste i tak produkuje już hex (z xxd, hexdump -C, podpowiedzi debuggera) albo base64 (z odpowiedzi REST API, linijek logu). Jeśli masz surowy plik .msgpack, najpierw uruchom xxd -p file.msgpack albo base64 file.msgpack.

Jak rozpoznaje hex od base64?

Hex jest wykrywany jako pierwszy: jeśli input (po usunięciu białych znaków, przecinków, prefiksów 0x i sekwencji \xNN) składa się wyłącznie ze znaków hex i ma parzystą długość, traktujemy go jako hex. W przeciwnym razie przekazujemy do atob jako base64. Linia "Detected input format" w raporcie mówi, którą ścieżką poszliśmy — przydatne, gdy niejednoznaczny string typu deadbeef okazuje się prawidłowy w obu kodowaniach.

Czemu czasem mówi "Extra bytes were found"?

Strumienie MessagePack powinny być dokładnie jedną wartością najwyższego poziomu. Jeśli wkleiłeś frame z prefiksem długości (np. 4-bajtową długość big-endian dodaną przez framing transportu) lub dwa sklejone payloady, dekoder czyta pierwszą wartość i narzeka na resztę. Odetnij framing albo rozdziel na pojedyncze wiadomości.

Czy dekoduje rozszerzenia MessagePack (timestamp, typy custom)?

Domyślny dekoder @msgpack/msgpack obsługuje wbudowany typ rozszerzenia timestamp (-1) od ręki i pokazuje go jako Date JS w podglądzie. Niestandardowe typy rozszerzeń (0127) dekodują się do generycznej formy {type, data} — walidator nadal zgłosi payload jako prawidłowy, ale do interpretacji zawartości potrzebujesz własnego ExtensionCodec.

Jaka jest różnica między tym a MessagePack Viewerem?

Viewer służy do przeglądania — pokazuje drzewiasty rozkład każdego klucza i wartości. Ten walidator odpowiada na pytanie "czy to w ogóle jest prawidłowe?" — szybkie tak/nie plus liczba bajtów i typ najwyższego poziomu. Jeśli walidator mówi, że parsuje, a typ jest dobry, przełącz się na Viewer, żeby naprawdę przeczytać zawartość.

Inne narzędzia MessagePack

Gdy potwierdzisz, że payload jest prawidłowy, te narzędzia poprowadzą cię dalej: