JSON in Go-Strukturen für BSON umwandeln — Numio
Schreibt ein JSON-Dokument als Go-Literal aus bson.M (Objekte) und bson.A (Arrays) für den MongoDB-Go-Treiber um, mit den in Go nötigen abschließenden Kommas. Schlüssel behalten ihre Reihenfolge, null wird zu nil und Strings werden unverändert übernommen.
Eine in mongosh oder Compass getestete MongoDB-Abfrage oder einen Filter in Go-Code übertragen.
JSON
Go Bson
Wann sie hilft
- Eine in mongosh oder Compass getestete MongoDB-Abfrage oder einen Filter in Go-Code übertragen.
- Eine Aggregation-Stage oder ein Update-Dokument in einem Test als Inline-Go-Literal schreiben.
Anwendung
- Füge die Abfrage, den Filter oder das Dokument als striktes JSON ein (Schlüssel in Anführungszeichen, keine Shell-Helfer wie ObjectId(...) oder ISODate(...)).
- Kopiere das bson.M{...}-Literal aus dem Go-Panel; Operatoren wie $gte, $in und $or bleiben als String-Schlüssel erhalten.
- Importiere go.mongodb.org/mongo-driver/bson und übergib den Wert an Find, UpdateOne oder Aggregate; passe Typen wie unten beschrieben an.
JSON-Eingabe
{
"status": "active",
"deletedAt": null,
"age": { "$gte": 18 },
"tags": { "$in": ["go", "mongo"] },
"$or": [
{ "verified": true },
{ "score": { "$gt": 90 } }
]
}Go bson.M / bson.A
bson.M{
"status": "active",
"deletedAt": nil,
"age": bson.M{
"$gte": 18,
},
"tags": bson.M{
"$in": bson.A{
"go",
"mongo",
},
},
"$or": bson.A{
bson.M{
"verified": true,
},
bson.M{
"score": bson.M{
"$gt": 90,
},
},
},
}Details und Einschränkungen
Das JSON wird in deinem Browser geparst und durchlaufen, um das Literal zu bauen; nichts wird an einen Server gesendet.
null wird zu nil. Zahlen sind untypisierte Go-Konstanten, sodass 18 zu int und 1.5 zu float64 wird; ganze Zahlen über 2^53 verlieren beim Parsen des JSON an Genauigkeit.
Strings werden als Go-String-Literale geschrieben, daher bleiben eckige oder geschweifte Klammern darin, etwa "tags[0]", unverändert.
Die Ausgabe ist bson.M, das ungeordnet ist. Verwende bson.D, wo die Feldreihenfolge zählt, etwa bei Sortierdokumenten oder einigen Pipeline-Stages.
FAQ
Kann ich eine mongosh-Abfrage mit ObjectId() oder ISODate() einfügen?
Nein. Die Eingabe muss gültiges JSON sein, Shell-Helfer führen daher zu einem Parse-Fehler. Verwende einfache Strings und ersetze sie in Go durch eine ObjectID aus Hex (primitive.ObjectIDFromHex in Treiber v1) oder einen time.Time-Wert.
Erzeugt es Go-Structs?
Nein, es erzeugt nur Map- und Slice-Literale. Für typisierte Structs mit json-Tags nutze die Seite JSON to Go.
Muss die oberste Ebene ein Objekt sein?
Nein. Ein Root-Array wird zu bson.A{...}, was zu einer Aggregation-Pipeline passt, in der jede Stage ein bson.M ist.