100 % local — vos données ne quittent jamais votre navigateur

JSON en Mongoose — un fichier modèle à requérir

Transformez un échantillon JSON en schéma Mongoose. Un schéma par objet, requis là où l’échantillon montre une valeur, prêt à exporter comme modèle.

Instantané Privé Zéro cookie

Entrée JSON

Sortie Mongoose

Ce que fait cet outil

Un échantillon JSON devient un schéma Mongoose, un const par objet, et un modèle à la fin.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
import mongoose from 'mongoose';

const AddressSchema = new mongoose.Schema({
  city: { type: String, required: true },
});

const RootSchema = new mongoose.Schema({
  id: { type: Number, required: true },
  name: { type: String, required: true },
  address: { type: AddressSchema, required: true },
});

export default mongoose.model('Root', RootSchema);

Les enfants d’abord : les schémas sont des valeurs d’exécution, l’un doit exister avant qu’un autre l’emploie. Un tableau de documents à la racine décrit son premier élément — c’est lui la forme de l’enregistrement, la liste étant déjà ce qu’est la collection.

required sur un tableau a besoin d’aide

Mongoose donne à tout tableau la valeur par défaut []. Un champ déclaré { type: [String], required: true } valide donc même quand la clé est absente : le défaut satisfait l’exigence. Vérifié sur Mongoose 9 :

documentrequired: truerequired: true, default: undefined
{ tags: ["a"] }passepasse
{ tags: [] }passepasse
{}passeéchoue

La première colonne ne dit pas ce que le mot promet. Les champs tableau sont donc émis avec default: undefined à côté de required: true, pour qu’un tableau manquant soit l’erreur qu’il prétend être. Un tableau vide passe toujours, et c’est juste : c’est une valeur.

Les objets imbriqués deviennent des sous-documents, avec leur propre _id

address ci-dessus est un sous-document, et Mongoose lui donne un _id à lui :

{ _id: ObjectId("…"), address: { city: "Paris", _id: ObjectId("…") } }

C’est le défaut de Mongoose, pas un ajout d’ici. Si ces identifiants internes sont du bruit pour vous, new mongoose.Schema({ … }, { _id: false }) les retire — une décision sur vos documents, et c’est pourquoi elle vous est laissée.

Un export MongoDB n’est pas le JSON que vous voulez

mongoexport écrit du JSON étendu :

{ "_id": { "$oid": "65f1c…" }, "created": { "$date": "2026-01-01T00:00:00Z" } }

Ce sont des objets : le générateur en fait des schémas de sous-documents, et _id finit en sous-document porteur de son propre _id, ce qui n’est certainement pas votre intention. Remplacez-les à la main par mongoose.Schema.Types.ObjectId et Date. Une clé nommée $oid veut dire quelque chose pour MongoDB et rien pour un lecteur de structures.

Mixed est l’endroit où l’échantillon s’est tu

null, une valeur inconnue, un tableau vide et un tableau hétérogène donnent tous mongoose.Schema.Types.Mixed. Un champ Mixed n’est pas validé et, bon à savoir, ses modifications ne sont pas suivies automatiquement : il faut appeler markModified. Restreignez-le dès que vous savez ce qui doit s’y trouver.

Confidentiel par conception

Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.

Questions fréquentes

Pourquoi les tableaux portent-ils `default: undefined` ?
Parce que sans cela, `required: true` sur un tableau ne fait rien. Mongoose donne à tout tableau une valeur par défaut `[]` : un document où la clé manque valide quand même, l’exigence étant satisfaite par ce défaut. Ajouter `default: undefined` fait que le champ se comporte comme le mot « requis » se lit. Vérifié sur Mongoose 9, pas supposé.
Mon objet imbriqué a gagné un `_id`. D’où vient-il ?
De Mongoose : un schéma imbriqué employé comme type de champ est un sous-document, et les sous-documents reçoivent leur propre `_id` par défaut. Si vous n’en voulez pas, passez `{ _id: false }` en options du schéma. Il est laissé parce que c’est le défaut de Mongoose, et le retirer en silence changerait l’allure de vos documents.
J’ai collé un export MongoDB et j’obtiens des champs `$oid`. Est-ce normal ?
C’est ce que contenait l’échantillon. Un document `mongoexport` est écrit en JSON étendu — `{"_id": {"$oid": "…"}}`, `{"$date": "…"}` — le générateur voit donc des objets et en fait des sous-documents. Remplacez-les par `mongoose.Schema.Types.ObjectId` et `Date` : l’outil ne peut pas connaître la convention derrière une clé qu’il n’a jamais vue.

Convertisseurs associés