Convertir JSON en structures Go avec BSON — Numio
Réécrit un document JSON en littéral Go construit avec bson.M (objets) et bson.A (tableaux) pour le driver Go de MongoDB, avec les virgules finales qu’exige Go. Les clés gardent leur ordre, null devient nil et les chaînes sont copiées telles quelles.
Porter en code Go une requête ou un filtre MongoDB testé dans mongosh ou Compass.
JSON
Go Bson
Quand l’utiliser
- Porter en code Go une requête ou un filtre MongoDB testé dans mongosh ou Compass.
- Écrire une étape d’agrégation ou un document de mise à jour sous forme de littéral Go inline dans un test.
Mode d’emploi
- Collez la requête, le filtre ou le document en JSON strict (clés entre guillemets, sans helpers du shell comme ObjectId(...) ou ISODate(...)).
- Copiez le littéral bson.M{...} depuis le panneau Go ; les opérateurs comme $gte, $in et $or restent des clés de type string.
- Importez go.mongodb.org/mongo-driver/bson et passez la valeur à Find, UpdateOne ou Aggregate, en ajustant les types comme indiqué ci-dessous.
Entrée JSON
{
"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,
},
},
},
}Détails et limites
Le JSON est parsé et parcouru dans votre navigateur pour construire le littéral ; rien n’est envoyé à un serveur.
null devient nil. Les nombres sont des constantes Go non typées : 18 devient donc int et 1.5 float64 ; les entiers au-delà de 2^53 perdent en précision lors du parsing du JSON.
Les chaînes sont écrites comme des littéraux string Go : les crochets ou accolades qu’elles contiennent, comme "tags[0]", ne sont pas modifiés.
La sortie est un bson.M, qui n’est pas ordonné. Utilisez bson.D quand l’ordre des champs compte, comme pour les documents de tri ou certaines étapes de pipeline.
FAQ
Puis-je coller une requête mongosh avec ObjectId() ou ISODate() ?
Non. L’entrée doit être du JSON valide, donc les helpers du shell provoquent une erreur de parsing. Utilisez des chaînes simples, puis remplacez-les en Go par un ObjectID créé depuis l’hex (primitive.ObjectIDFromHex dans le driver v1) ou par une valeur time.Time.
Génère-t-il des structs Go ?
Non, il ne produit que des littéraux de map et de slice. Pour des structs typées avec des tags json, utilisez la page JSON vers Go.
La racine doit-elle être un objet ?
Non. Un tableau racine devient bson.A{...}, ce qui convient à un pipeline d’agrégation, où chaque étape est un bson.M.