Datenbanken & SQL

MongoDB Extended JSONmit sichtbaren Typen

Striktes EJSON konvertieren und Hinweise zu Typen und Genauigkeit vor dem Export prüfen.

MongoDB Extended JSON

ObjectId untersuchen

EJSON-Eingabe

JSON-Ergebnis

Die Verarbeitung erfolgt in diesem Browser, ohne Datenbankverbindung oder Hochladen des Dokuments.

Ausgabe und Interpretation

Ein strikter JSON-Wert. Shell-Ausdrücke, Kommentare und doppelte Schlüssel werden abgelehnt.

Ganze Zahlen ohne Hülle werden als Int32/Int64 interpretiert, Dezimal- und Exponentialformen als Double. Zeichenketten bleiben Zeichenketten.

Grenzen: 500.000 UTF-16-Einheiten, Tiefe 100, 50.000 Knoten und 2.000.000 Ausgabezeichen.

Eingabe oder Optionen geändert. Vor dem Export erneut konvertieren.

MongoDB Extended JSON begegnet Ihnen, wenn ein Export neben normalen Feldern auch $oid, $date oder $numberDecimal enthält. Diese Hüllen sind Teil der Typbeschreibung: Ihr Entfernen verändert, was ein Empfänger daraus rekonstruieren kann.

Das Beispiel enthält absichtlich eine große laufende Nummer. Vergleichen Sie, ob ihre Ziffern erhalten bleiben und ob der ursprüngliche Zahlentyp weiterhin angegeben ist. Die Eingabe bleibt beim Konvertieren unverändert neben dem Ergebnis stehen.

Warum MongoDB Extended JSON verwenden?

Die Darstellung ändern, ohne ihre Folgen zu übersehen.

Die richtigen Hüllen behalten

MongoDB Extended JSON startet im kanonischen Modus. Relaxed vereinfacht endliche Zahlen und geeignete Datumswerte. ObjectId und Decimal128 behalten ihre Hüllen; beide Seiten bleiben sichtbar, damit Sie die Änderung nachvollziehen können.

Drei typisierte Datenzeilen: Die Zahlenhülle öffnet sich, die Hüllen für Kennung und Dezimalwert bleiben

Große Ganzzahlen vollständig schreiben

9007199254740993 wird direkt aus der exakten Ganzzahl ausgegeben. Ein Hinweis erklärt, warum ein Empfänger mit JavaScript Number trotzdem eine andere Zahl erhalten könnte. Vollständige Ziffern allein garantieren keine verlustfreie Weiterverarbeitung.

Eine vollständige Folge von Ziffernblöcken durchläuft eine Dokumentgrenze neben einem Warnsymbol

Die Erwartungen des Empfängers prüfen

01

Daten statt Shell-Ausdrücke einsetzen

ObjectId() und ISODate() sind keine JSON-Syntax. Exportieren Sie die Werte zunächst mit $oid- und $date-Hüllen. Ein Dokument, ein Array oder ein einzelner Wert ist zulässig.

  • Beispiel und Leeren zeigen eine Vorschau. Nach dem Anwenden stellt Rückgängig Eingabe und Ausgabe einmal wieder her.
02

Den passenden Modus auswählen

Canonical hält explizite Zahlentypen fest. Relaxed eignet sich zum Lesen; prüfen Sie danach die Hinweise, bevor Sie BSON in JSON konvertieren und weitergeben.

  • Eine Änderung von Modus oder Einrückung sperrt den Export des bisherigen Ergebnisses sofort.
03

Automatik gezielt steuern

Die automatische Konvertierung wartet 350 ms nach der letzten Änderung. Beim Ausschalten wird wartende Arbeit abgebrochen und die Schaltfläche eingeblendet.

  • Ctrl/Cmd + Enter startet ebenfalls. Kopieren und Download enthalten immer das vollständige Ergebnis.

Typen und Werte nachvollziehbar behandeln

Definierter Typumfang

Unterstützt werden ObjectId, Decimal128, Int32, Int64, Double, Date, Binary, UUID, reguläre Ausdrücke, Timestamp und MinKey/MaxKey. UUID wird als Binärhülle mit Subtyp 04 normalisiert. Regex-Optionen werden sortiert; der Ausdruck wird nicht ausgeführt.

Datumswerte außerhalb von JavaScript Date

Canonical bewahrt vorzeichenbehaftete 64-Bit-Millisekunden als Zeichenkette, auch außerhalb des Date-Bereichs. Relaxed schreibt nur Werte zwischen 1970 und 9999 als UTC-ISO-Datum. Andere Werte behalten die Millisekundenhülle, statt abgeschnitten zu werden.

Keine heimliche String-Erkennung

Unverpackte Ganzzahlen werden anhand ihres Bereichs als Int32 oder Int64 gelesen; Dezimal- und Exponentialformen als Double. Lange Dezimalschreibweisen können dabei gerundet werden. Eine Zeichenkette, die wie ein Datum oder eine Kennung aussieht, bleibt unverändert.

Eingabegrenzen und bewusster Umfang

Strikter v2-Teilumfang
Keine Shell-Ausführung, Syntaxreparatur, Legacy-v1-, Code/Scope-, DBPointer-, Undefined- oder Symbol-Hüllen. Unbekannte normale Feldnamen bleiben Felder; erkannte Typobjekte müssen genau die vorgeschriebene Struktur haben.
Kein Entfernen aller Typkennzeichen
Relaxed bleibt EJSON. Es entfernt nicht jeden Schlüssel mit Dollarzeichen und wandelt Decimal128 nicht in Number um. Bereits verlorene BSON-Typinformationen lassen sich durch einen Wechsel zu Canonical nicht zuverlässig zurückgewinnen.
Genau ein JSON-Wert
JSONL, aneinandergereihte Dokumente, BSON-Binärdateien, Hex/Base64-Container, mongodump und Datei-Uploads sind ausgeschlossen. Verwenden Sie einzelne Dokumente oder ein Array. Das Werkzeug öffnet keine Datenbank und importiert keine Sammlung.
Begrenzte Ressourcen und Wertebereiche
Maximal 500.000 UTF-16-Einheiten, Tiefe 100, 50.000 Knoten und 2.000.000 Ausgabezeichen. Int64-Überläufe, ungültige Kalendertage und doppelte Schlüssel stoppen die gesamte Konvertierung. Ein Teilergebnis ist nicht exportierbar.
Normalisierung statt Byte-Kopie
Leerraum und Datumsdarstellung dürfen sich ändern. Decimal128 und Regex folgen der offiziellen Engine, Gleitkommazahlen der binären Genauigkeit. Wer das Ergebnis als JSON parsen möchte, muss einen zur benötigten Präzision passenden Parser verwenden.

Fragen zu MongoDB Extended JSON

Was unterscheidet Canonical von Relaxed?

Canonical bevorzugt Typinformationen und verpackt auch Zahlen. Relaxed schreibt endliche Zahlen und geeignete Daten leichter lesbar. Beide Varianten sind gültiger JSON-Text. ObjectId und Decimal128 behalten ihre Typobjekte in beiden Modi.

Kann ich die Ausgabe von mongosh direkt einfügen?

Nur wenn sie bereits striktes JSON/EJSON ist. ObjectId("…"), ISODate("…") und NumberLong("…") sind Shell-Ausdrücke und werden abgelehnt. Exportieren oder serialisieren Sie das Dokument zuerst als Extended JSON.

Warum steht NumberLong als Zeichenkette da?

Die Zeichenkette in $numberLong verhindert, dass ein gewöhnlicher JSON-Parser die Ziffern frühzeitig rundet. Relaxed schreibt hier das vollständige Ganzzahl-Literal. Der Empfänger benötigt für große Werte weiterhin einen verlustfreien Zahlenparser.

Warum Decimal128 nicht einfach als number ausgeben?

JavaScript Number verwendet binäre 64-Bit-Präzision, nicht die dezimale Präzision von Decimal128. Die $numberDecimal-Zeichenkette bewahrt Darstellung und Typ. Sie bleibt deshalb auch in Relaxed erhalten.

Lässt sich eine komplette mongoexport-Datei konvertieren?

Wenn der Inhalt innerhalb der Grenzen genau einen JSON-Wert bildet, etwa ein Array. Der übliche zeilenweise Export mehrerer Dokumente ist JSONL und wird abgelehnt. Verarbeiten Sie die Dokumente einzeln oder exportieren Sie zuvor ein Array.

Ein unerwartetes Ergebnis gefunden?

Vor dem Kopieren die Typen prüfen

Öffnen Sie MongoDB Extended JSON, wählen Sie die Zieldarstellung und beachten Sie die Präzisionshinweise vor dem Speichern.