シェル式をデータに直す
ObjectId()やISODate()はJSON構文ではありません。$oidや$dateを含むEJSONとして出力してから入力してください。単一の値、文書、配列を受け付けます。
- サンプルとクリアは置換のプレビューを表示し、適用後は入力と結果を1回戻せます。
データベースとSQL
厳密なEJSONを入力し、標準形式と読みやすい形式を比較できます。
テキストはこのブラウザー内で処理します。データベースへの接続や文書の送信は行いません。
厳密なJSON値を1つ入力。シェル式、コメント、重複キーは使えません。
裸の整数はInt32/Int64、小数・指数表記はDoubleと解釈します。文字列の型は推測しません。
入力500,000 UTF-16単位、深さ100、50,000ノード、出力2,000,000文字まで。
入力または設定が変わりました。再変換してから出力してください。
MongoDB拡張JSONは、エクスポートした日付が文字列に見えたり、数値に$numberLongが付いていたりするときに役立ちます。包装を単純に取り除くと、読み込み先で元の型に戻せなくなることがあります。
サンプルには安全な整数範囲を超える連番を入れています。桁が変わらないことと、BSONの型情報が残ることを分けて確認してください。変換結果を作っても入力側の文書は書き換えません。
受け取り側へ渡す前に、変わる表現を確かめます。
MongoDB拡張JSONでは標準モードのCanonicalが初期値です。Relaxedにすると有限数値と一部の日付は簡潔になりますが、ObjectIdとDecimal128の包装は残ります。原文と結果を並べて確認できます。
9007199254740993のようなLongは正確な整数から書き出します。読み込み先がJavaScript Numberを使う場合のリスクも示すため、JSON変換が成功したという表示だけで精度を判断せずに済みます。
ObjectId()やISODate()はJSON構文ではありません。$oidや$dateを含むEJSONとして出力してから入力してください。単一の値、文書、配列を受け付けます。
1970年より前の日付はRelaxedでもミリ秒の包装が残ります。数値が短くなった場合は型情報の注意も確認してください。
自動変換は最後の編集から350ms待ちます。オフにすると待機処理を取り消し、変換ボタンを表示します。
ObjectId、Decimal128、Int32、Int64、Double、日付、Binary、UUID、正規表現、Timestamp、MinKey/MaxKeyに対応します。UUIDはサブタイプ04のバイナリ包装に正規化されます。正規表現はオプションを並べ替えるだけで、検索を実行しません。
Canonicalでは符号付き64ビットのミリ秒を文字列のまま扱い、JavaScript Dateの範囲外でも切り捨てません。RelaxedでUTCのISO表記にするのは1970〜9999年だけです。それ以外はミリ秒の包装を維持します。
裸の整数は範囲でInt32またはInt64、小数と指数形式はDoubleになります。長い十進表記は二進64ビットへの丸めが起こることがあります。24桁の16進文字列や日付らしい文字列は、そのまま文字列です。
Canonicalは数値にも包装を付け、BSONの型を優先します。Relaxedは有限数値や適用範囲内の日付を読みやすくします。どちらもJSONとして読めますが、ObjectIdやDecimal128の包装は共通して残ります。
既に厳密なJSON/EJSONであれば貼れます。ObjectId("…")、ISODate("…")、NumberLong("…")を含むシェル表現はエラーになります。先にExtended JSONとしてエクスポートまたは文字列化してください。
Canonicalでは$numberLongの文字列で整数の桁を保護します。このツールのRelaxed出力は完全な整数リテラルになります。ただし受信側のJSON.parseがNumberへ変換すると、安全な範囲外の値は丸められます。
JavaScript Numberの二進64ビット精度とDecimal128の十進精度は異なります。$numberDecimalは値の十進表現と型を維持するための包装です。Relaxedでも取り除きません。
上限内で単一のJSON値になっている場合だけです。配列形式なら扱えますが、標準的な行区切りの複数文書はJSONLなので拒否します。個別に処理するか、適切なエクスポート設定で配列にしてください。
気になる解析結果がありますか?