Base64 を JSON にデコードする方法
- 入力 · Base64 に Base64 を貼り付けます。ページを開いた時点でサンプルが入っているので、置き換えてください。
- 出力 · テキスト に、スペース 2 つでインデントされた JSON が表示されます。JSON を整形 はデフォルトでオンです。デコードしたテキストをそのまま見たい場合はチェックを外してください。
- ステータス行を確認します。推定形式 が JSON なら、結果は有効な JSON としてパースできています。
- 出力をコピー は整形した JSON をコピーします。ダウンロード は、デコードした元のバイト列を
decoded.jsonとして保存します。
サンプルの eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJkZWNvZGUiXSwiYWN0aXZlIjp0cnVlfQ== をデコードして整形すると、次のようになります。
{
"id": 42,
"name": "base64hub",
"tags": [
"json",
"decode"
],
"active": true
}
逆方向には JSON を Base64 に変換 を使ってください。
Base64 の中の JSON を見分ける
JSON はほぼ必ず { か [ で始まり、これらのバイトからいくつかの見分けやすい書き出しが生まれます。
| Base64 の先頭 | デコード後の先頭 | 主な出どころ |
|---|---|---|
eyJ | {" + 英字 | コンパクトなオブジェクト、JWT のヘッダーとペイロード |
eyI | {" + 数字または記号 | 最初のキーが数字で始まるオブジェクト |
eyAi | { " | スペース入りのオブジェクト |
ewog | { + 改行 + スペース | 整形済みのファイル |
W3s | [{ | オブジェクトの配列 |
WyJ | [" + 英字 | 文字列の配列 |
つまり、eyJhIjoxfQ== は {"a":1}、W3siYSI6MX1d は [{"a":1}] です。ほかの形式のパターンは よく見る Base64 の接頭辞 のページにあります。
Base64 でエンコードされた JSON はどこから来るのか
- JSON Web Token(JWT)のヘッダーとペイロードは、Base64URL でエンコードされた JSON をドットで区切ったものです。セグメントを 1 つここに貼り付けるか、トークン全体を JWT デコーダー に貼り付けてください。形式については JWT での Base64 で解説しています。
- 構造化されたメタデータ、ページネーションのカーソル、イベントのペイロードを、別の JSON 文書の中の Base64 文字列として渡す API や Webhook があります。外側の文書があるなら、JSON 内の Base64 をデコード でそうしたフィールドを一度にすべて見つけてデコードできます。
- Kubernetes の
.dockerconfigjsonSecret は、コンテナレジストリの認証情報を JSON 文書の Base64 として保存しており、その JSON 自体にも Base64 のauth値が入っています。Docker config JSON デコーダー なら両方の層を展開できます。 - 環境変数や CI のシークレットでは、引用符の問題を避けるために、JSON の設定を 1 行の Base64 にして渡すことがよくあります。
URLセーフな入力(- と _、パディングなし)は自動で受け付けるので、トークンのセグメントもそのままデコードできます。
JSON が整形されない場合
整形には有効な JSON が必要です。パースに失敗すると、デコードしたテキストがそのまま表示されます。たいていはそれで問題が分かります。
- データが途中で切れていて、テキストが値の途中で終わっています。Base64 文字列全体をコピーしたか確認してください。改行や引用符が混ざってしまった場合は Base64 を修復 が役立ちます。
- テキストが厳密には JSON ではありません。シングルクォート、末尾のカンマ(
{"a":1,}はeyJhIjoxLH0=)、コメントは、手書きの設定ファイルではよく見かけますが、JSON としては無効です。 - 文字コードが違います。JSON は定義上 UTF-8 なので(RFC 8259)、アクセント付きの文字や日本語が化けるなら、生成側が別のエンコーディングを使っています。文字コード を試してください。
- ペイロードが圧縮されています。出力が読めず、Base64 が
H4sIで始まるなら、JSON はエンコードの前に gzip で圧縮されています。gzip Base64 デコーダー を使ってください。
コードで Base64 を JSON に変換する
import base64, json
s = "eyJpZCI6NDIsIm5hbWUiOiJiYXNlNjRodWIiLCJ0YWdzIjpbImpzb24iLCJkZWNvZGUiXSwiYWN0aXZlIjp0cnVlfQ=="
data = json.loads(base64.b64decode(s))
print(json.dumps(data, indent=2))
json.loads はバイト列をそのまま受け付けます。JavaScript では、JSON.parse(atob(s)) だと ASCII 以外の文字が化けてしまうので、いったんバイト列にデコードしてから TextDecoder を通してください。
const s = "eyJuYW1lIjoiYmFzZTY0aHViIn0=";
const json = new TextDecoder().decode(Uint8Array.from(atob(s), c => c.charCodeAt(0)));
JSON.parse(json).name; // "base64hub"
URLセーフなバリアントについては Python での Base64 と JavaScript での Base64 を参照してください。
よくある質問
Base64 を JSON にデコードするには?
上に Base64 を貼り付けてください。デコードした JSON は整形され、ダウンロード で decoded.json として保存できます。コードなら、Python では json.loads(base64.b64decode(s))、Node.js では JSON.parse(Buffer.from(s, "base64").toString()) です。
JSON が整形されないのはなぜですか?
デコードしたテキストが有効な JSON ではないため、そのまま表示されています。よくある原因は、途中で切れた文字列、シングルクォート、末尾のカンマ、コメントです。その場合「推定形式」欄は JSON ではなくテキストになります。
Base64 文字列が JSON かどうかを見分けるには?
ほとんどの JSON オブジェクトは、{" の後に英字が続くため、エンコードすると eyJ で始まる文字列になります。オブジェクトの配列は W3s で始まり、整形済みの JSON は ewog で始まることがよくあります。
ここで JWT のペイロードをデコードできますか?
できます。真ん中のセグメント(2 つのドットの間)を貼り付けてください。有効期限や署名の検証も含めてトークン全体を扱うなら、JWT デコーダー を使ってください。