プロトコルとバイナリ直列化

MessagePackデコーダバイト列の型と境界を確認

hex、Base64、10進バイト列を貼り付けるか、ローカルファイルを開きます。通常のJSONの符号化にも切り替えられます。

MessagePackデコーダ

入力

結果

バイト列とファイルはブラウザ内で処理され、送信されません。

オプション

バイト列を貼り付けるかファイルを開いてください。

キャッシュや通信ログから取り出したバイト列は、そのままでは構造が分かりません。MessagePackデコーダは階層と型を先に示し、続けてJSONプレビューを確認できます。 MessagePackデータの型を追うときに役立ちます。

単純なMessagePack JSON変換ではbinを文字列と混同したり、64ビットの識別子を丸めたりしがちです。JSONからMessagePackへの符号化も同じ画面で試せます。

MessagePackデコーダを使う理由

JSONで表せないワイヤ型も見失いません。

型付きツリーで違いを残す

MessagePackデコーダはstr、bin、拡張型の番号、大きな整数を別々に表示します。JSONプレビューには型を示す印を付けるため、調査に必要な情報が消えません。

バイト列が文字列、バイナリ、拡張値、長い整数の枝へ分かれる図。

余分なバイトの開始位置を示す

最初の値が終わった後も入力が続くと、その先頭のバイト位置を報告します。途中で切れたデータにも位置を示し、連結されたメッセージを見分けられます。

構造化された値の後ろに別のバイト列が残り、境界に琥珀色の印がある図。

入力形式と出力の取り違えを防ぐ

01

手元の表記を選ぶ

初期設定はhexです。Base64や10進バイト列は貼り付ける前に切り替えます。短い文字列を推測で別形式として扱いません。 MessagePackデコードでは入力形式の指定が重要です。

  • サンプルにはbin、未知の拡張型、大きな整数が入っています。
02

実行タイミングを決める

自動処理は入力が止まって350ミリ秒後に動きます。オフにすると実行ボタンが現れ、Ctrl/Cmd+Enterも使えます。変更後は古い結果をエクスポートできません。

  • ツリーとJSONプレビューの切り替えではバイト列を再解析しません。
03

型を確認して保存する

ツリーで型、開始位置、長さを確認してからJSONをコピーします。符号化側では表示用のhexだけでなく実際の.msgpackファイルを保存できます。

  • 拡張値の印は逆変換用の命令ではありません。

構造の検査とバイト列の生成

入れ子のマップと配列

キーや添字を開いて確認できます。各ノードに開始バイトと長さを表示し、多い場合は100行ずつ追加します。

binと拡張型を保持

binは生バイトのまま表示し、未知のextは符号付き番号と全ペイロードを保持します。タイムスタンプには秒とナノ秒も示します。

JSONから実ファイルへ

通常のJSONをMessagePackに符号化し、hex、Base64、10進バイト列をコピーするか、バイナリファイルを保存します。

型を変換するときの境界

入力は完全な一つの値
MessagePackデコーダは先頭の値以降の余分なバイトを無視しません。連結ストリームは最初の余剰位置でエラーになるため、分割してから調べます。
未知の拡張型は解釈しない
共通の意味を持つのは型-1のタイムスタンプだけです。アプリ固有の値は番号と生バイトを残し、UUIDなどと決めつけません。
JSONプレビューは無損失の往復ではない
JSONにはbin、ext、文字列以外のマップキー、正確な64ビット整数の型がありません。印は閲覧用で、符号化側は標準JSONだけを受け付けます。
ブラウザ内の上限
入力は1MiB、深さ64、ノード数10000までです。上限超過時は途中までの結果を完全な解析として見せません。

MessagePackデコーダのよくある質問

strとbinの違いは何ですか

strはUTF-8の文字列、binは任意のバイトです。ツリーでは別の型として表示されるため、バイナリを文字に置き換えません。

大きな整数がJSONで文字列になるのはなぜですか

JavaScriptで正確に表せない整数もツリーでは桁を保ちます。JSONプレビューでは型を示す印と10進文字列で表示します。

タイムスタンプはどう解読しますか

型-1の32、64、96ビット形式を仕様どおり読み、秒、ナノ秒、生バイトを残します。表示できる場合だけ日時も添えます。

残りバイトの警告は何を意味しますか

最初の値が終わっても後ろにバイトがある状態です。最初の余分なバイト位置を示すので、連結データやフレーム境界を確認してください。

タイムスタンプ以外の拡張型は

タイムスタンプ以外の拡張型は書き込み元のアプリが意味を定めます。番号と生のhexは表示しますが、意味は推測しません。

ほかにも質問がありますか?

MessagePackデコーダを試す

サンプルで型付きツリーとJSONプレビューを比較し、自分のペイロードを調べるか、標準JSONをMessagePackへ符号化してください。

ブラウザ内で処理します。