プロトコルとバイナリ形式

BSON JSON変換

単一BSON文書の型と位置を調べ、拡張JSONから新しいBSON文書を作成できます。

BSON JSON変換

BSONバイト列または拡張JSON

結果

入力はこのブラウザー内で処理し、DB接続やアップロードは行いません。

設定

EJSONは2スペースで整形します。処理は実行時のみです。

BSONバイト列または拡張JSONオブジェクトを入力してください。

mongodumpのバイト列を受け取ったとき、BSON JSON変換だけで値を見るとObjectIdや64ビット整数の型が隠れがちです。まず型付きツリーで元の文書を確認すると、数値の意味を取り違えません。

BSONファイルの解析結果には絶対バイト位置も付きます。拡張JSONへの出力と逆方向のエンコードを同じ作業台で行えますが、元ファイルは書き換えません。このBSONビューアは元ファイルを書き換えず、結果だけを表示します。

BSON JSON変換で型を見る理由

読めないバイト列をフィールドと型の対応に変えます。

バイトからフィールドへたどる

BSON JSON変換の前に文書長と終端を検証し、フィールドを元の順で表示します。型、値の概要、絶対バイト位置が並ぶため、破損箇所を具体的に追えます。

バイトのタイルがID、日付、数値、入れ子のアイコンを持つ順序付きツリーへ広がる図。

型情報を包装して残す

Canonical EJSONはObjectId、Int64、Decimal128、バイナリのサブタイプを包装して表します。Relaxed EJSONは読みやすい一方、再変換で一部の型が失われます。

型アイコン付きの文書ブロックと波括弧の構造が双方向につながる図。

出力前に確認する三つの点

01

バイト形式を指定する

16進数は空白、コロン、ハイフンを許容します。Base64は明示的に選び、有効なパディングが必要です。新しいファイルは確認後に入力と交換します。

  • 複数文書が連結されていれば最初の終端位置でエラーになります。
02

型付きツリーで読む

手動で解析し、フィールド順、BSON型、バイト位置を確認します。ツリーと二種類のEJSON表示は再解析せず切り替えられます。

  • 入力や形式を変えた直後は古い結果をコピーできません。
03

目的に合う形式を選ぶ

型を保つ必要があるならCanonical EJSONを保存します。読みやすさ優先ならRelaxed表示を選びます。逆方向は新しい.bsonファイルを生成します。

  • Ctrl/Cmd+Enterで現在の方向を実行できます。

一文書の中身と変換結果を確認

BSON型を行ごとに表示

ObjectId、Int32、Int64、Decimal128、日付、バイナリのサブタイプと入れ子を区別します。

二種類の拡張JSON

標準の型付き出力に加え、日付や数値を読みやすくするRelaxed表示を選べます。

拡張JSONからバイナリを作成

標準JSON構文のEJSONオブジェクトをBSONにエンコードし、16進数やBase64で点検してダウンロードできます。

見落とせない形式上の境界

単一の完全な文書のみ
mongodumpの複数文書ストリームは最初の文書の終了位置で拒否します。全件を見る場合はbsondumpを使ってください。
通常のJSONでは型を保てない
既定のテキスト出力はCanonical EJSONです。Relaxed表示の数値と日付は再エンコードで元の型に戻らない場合があります。
シェル式やDB接続は扱わない
ObjectId(...)のような式を実行せず、MongoDBにも接続しません。エンコード入力はEJSONを含む標準JSON文です。
ブラウザーの処理上限
最大16 MiB、64階層、10万フィールドまでです。これはBSON仕様の上限ではなく、このツールの予算です。

BSON JSON変換のよくある疑問

mongodumpのBSONファイルからJSONを得るには?

単一文書ならここでCanonical EJSONを保存できます。コレクションのダンプは複数文書が多いため、全件にはbsondumpを使います。

複数文書の入ったBSONファイルを読めますか?

このツールは一文書だけを検証します。後続バイトがあればその絶対位置を示し、最初の一件だけを成功扱いしません。

ObjectIdや日付を普通のJSONにできますか?

Relaxed EJSONで日付は読みやすくなりますが、型保持にはCanonical EJSONが適します。文字列だけが必要なら確認後に対象フィールドを明示的に変換してください。

BSONの日付を読みやすく表示するには?

Relaxed EJSONでは対象範囲の日付をISO形式で確認できます。Canonicalでは$dateにミリ秒値を残します。

JSONの日付文字列をエンコードしても日付型にならないのはなぜ?

普通のJSON文字列にはBSON日付型の指定がありません。$date包装を使ってからエンコードしてください。

対応すべき定義で問題がありましたか?

BSON JSON変換を始める

BSON JSON変換で一文書を型付きツリーとCanonical EJSONに照らし、必要な場合だけ新しいBSONを作成しましょう。

処理はこのブラウザー内で行います。