MessagePack を JSON に変換
MessagePack の hex や base64 を読める JSON にデコード。バイトを貼り付ければオブジェクトが返ってきます。ブラウザ内で完結、アップロードなし。
入力
出力
MessagePack to JSON とは
gRPC のサイドカーがリクエストボディを長い hex 文字列として吐き出していて、中身を読みたい。あるいは Redis から取り出した値を上流サービスが msgpack で保存していて、ターミナルには \x82\xa7orderId\xa8ORD-7421 と表示される。MessagePack はコンパクトなバイナリ形式で、通信には最適ですがログ行では読めません。このページは hex / base64 のダンプを受け取り、そこに含まれる JSON を返します。
デコードは 公式の MessagePack ワイヤーフォーマット仕様に従い、@msgpack/msgpack JavaScript ライブラリを使用しています。map はオブジェクト、array は配列、整数や浮動小数点はそのまま JSON の数値になり、結果は RFC 8259 に沿って整形されます。0x プレフィックス付き hex、\x エスケープ、スペース、カンマもそのままパースできます。base64(RFC 4648)の入力も自動で検出します。
アップロードなし、バックエンドなし、ログなし。デコードはブラウザ内で Uint8Array として処理されます。タブを閉じればバイトはなくなります。
MessagePack to JSON の使い方
貼り付け、読み、コピー。Convert ボタンはありません。タイプするたびに右側のパネルが更新され、300 ms のデバウンスでキー入力ごとに走り続けるのを防ぎます。
hex または base64 を貼る
MessagePack のバイトを左のエディタに入れます。形式は何でも OK:生の hex(82a7...)、スペース区切りの hex(82 a7 6f)、Python の \x エスケープ付きバイトリテラル、base64 のかたまりまで。サンプルを押すと、注文追跡用のペイロードが読み込まれ、実際のオブジェクトにデコードされます。
82a76f72646572496441 4f52442d3734323120a574 6f74616c cb4056600000000000このスニペットは Order ペイロードの一部 — orderId、total、items、customer を含んでいます。デコード後は構造全体が JSON で戻ります。
右側で JSON を読む
右パネルは変更があるたびに再デコードします。バイトが正しい MessagePack ならオブジェクトが見えます。途中で切れていたり、ゴミが付いていたり、別フォーマット(CBOR、BSON)だった場合は、パーサーのエラーメッセージが表示されます。だいたいどこでおかしくなっているかは特定できます。
必要な部分をコピー
出力側の コピー ボタンで JSON を取り出せます。ユニットテストのフィクスチャに入れたり、バグチケットに貼ったり、別の整形にしたければ JSON フォーマッタ に通してください。逆方向(オブジェクト → msgpack)には JSON を MessagePack に を使ってください。
実際に使う場面
gRPC やサイドカーのログ本文を読む
サービスメッシュのサイドカーがリクエストボディを hex でダンプ。上流サービスが msgpack でシリアライズしているからです。hex を貼り付ければオブジェクトが見えて、その呼び出しに orderId: "ORD-7421" と total: 89.50 が入っていたことを推測ではなく確認できます。
Redis の値を確認する
容量を節約するため Redis に msgpack コーデックでオブジェクトを保存している。スクリプトを書かずに session:42 の中身を見たい。GET して値をコピーし(多くのクライアントは hex か base64 で表示)、ここに貼ります。
キャッシュエントリをデコードする
小さなペイロード向けのキャッシュ — MessagePack、FlatBuffers、ときには生の protobuf — が今や至る所にあります。キャッシュされた blob が msgpack で、ライブの JSON と突き合わせたいとき、これが最速の比較ルートです。
クライアントが何を送っているかを検証する
帯域節約のためモバイルクライアントが msgpack でリクエストボディをエンコードしている。リグレッションが起きた。実際のバイトをキャプチャ(Charles、mitmproxy、ネットワークタブ)して貼り付け、フィールド名と値がサーバの期待するスキーマと一致するか確認します。顧客名 Ava Chen、商品 SKU-101 × 2 — 合っているかどうか。
よくある質問
入力したバイトはどこかにアップロードされますか?
いいえ。デコードはブラウザ内の純粋な JavaScript で行われます。@msgpack/msgpack ライブラリが入力を Uint8Array として読み込み、ワイヤーフォーマットを辿って結果のオブジェクトを JSON にレンダリングします。fetch も入力に対するアナリティクスもなく、タブの外には何も出ません。ローカル CLI ツールと同じ感覚で使えます。
hex と base64、どちらを貼っても大丈夫?
どちらでも動きます。ツールはまず hex を試します(ログ形式では 0x や \x プレフィックス付きの hex、スペース、カンマが最も一般的なので)。hex として無効な場合は base64 にフォールバックします。Python の b'\x82\xa7order' バイトリテラルもデコード可能で、b'...' の囲みは取り除かれ、エスケープは展開されます。
タイムスタンプが奇妙な形で出るのはなぜ?
MessagePack には タイムスタンプ拡張型があり、ライブラリはこれを JS の Date にデコードします。JSON 文字列化すると ISO 8601 文字列になります。出力に "2026-05-05T12:34:56.000Z" のような文字列が見えたら、それはエンコーダが埋め込んだ本物のタイムスタンプであり、バグではありません。
入力が部分的にしか有効でない場合は?
デコーダはワイヤーフォーマットを 1 バイトずつ読みます。長さプレフィックスが「次は 16 バイトの文字列」と言っているのに 8 バイトしか残っていなければ、パースエラーを投げます。右パネルのエラーメッセージは、どの型トークンで失敗したかとおおよその位置を示すので、貼り付けが途中で切れているか、余計なバイトが混じっているかを見つけるのに通常十分です。
バイナリ blob(bin ファミリ)も扱えますか?
はい。bin 8/bin 16/bin 32 の値は Uint8Array のインスタンスとして戻ります。JSON にはネイティブのバイト型がないため、文字列化時には {"0":1,"1":2,...} のように表示されます。bin フィールドを base64 で扱いたい場合は、まずここでデコードしてから JSON を Base64 に で変換してください。
protobuf や CBOR との違いは?
MessagePack はスキーマレスです(キーがバイト列の中に入っています)。CBOR は近いですが型が多く、エンコードも異なります。protobuf はそもそもデコードに .proto スキーマが必要です。バイトが protobuf ならこのツールは失敗しますので、代わりに Protobuf を JSON に を試してください。CBOR ならワイヤーフォーマットは似ていますが同じではないので、CBOR 専用のデコーダが必要です。
その他の MessagePack ツール
このツールと組み合わせて使える MessagePack 関連ツール — 逆方向、検証、バイトを眺めるだけなど: