Json To Yup Schema
Synthétiseur de schémas Yup typé

Générateur de Schémas de Validation Yup depuis JSON

Transformez des exemples JSON en schémas de validation d'objets Yup typés avec yup.string(), yup.number(), yup.array() et règles requises.

Confidentialité 100% côté client
Zéro transmission au serveur
Préréglages :
Indentation :
Stratégie des Champs Requis:
Données JSON Sources
import * as yup from "yup";

// --- Inferred Nested Sub-Schemas ---
const OrderCustomerSchema = yup.object({
    id: yup.number().integer().required(),
    fullName: yup.string().required(),
    email: yup.string().email().required(),
    phone: yup.string().required(),
    tier: yup.string().required(),
    loyaltyPoints: yup.number().integer().required(),
  });
const OrderShippingAddressCoordinatesSchema = yup.object({
      latitude: yup.number().required(),
      longitude: yup.number().required(),
    });
const OrderShippingAddressSchema = yup.object({
    street: yup.string().required(),
    suite: yup.string().required(),
    city: yup.string().required(),
    state: yup.string().required(),
    postalCode: yup.string().required(),
    country: yup.string().required(),
    coordinates: OrderShippingAddressCoordinatesSchema,
  });
const OrderItemsItemSchema = yup.object({
    sku: yup.string().required(),
    title: yup.string().required(),
    quantity: yup.number().integer().required(),
    unitPrice: yup.number().required(),
    discount: yup.number().nullable(),
    tags: yup.array().of(yup.string().required()).required(),
    inStock: yup.boolean().required(),
  });
const OrderPaymentSummarySchema = yup.object({
    currency: yup.string().required(),
    subtotal: yup.number().integer().required(),
    tax: yup.number().required(),
    shippingFee: yup.number().integer().required(),
    grandTotal: yup.number().required(),
    transactionRef: yup.string().required(),
    status: yup.string().required(),
  });

// --- Root Yup Schema Definition ---
orderSchema = yup.object({
  orderId: yup.string().uuid().required(),
  orderNumber: yup.string().required(),
  createdAt: yup.string().datetime().required(),
  isFulfilled: yup.boolean().required(),
  customer: OrderCustomerSchema,
  shippingAddress: OrderShippingAddressSchema,
  items: yup.array().of(OrderItemsItemSchema).required(),
  paymentSummary: OrderPaymentSummarySchema,
}).required();

// --- Inferred TypeScript Types ---
OrderCustomerType = yup.InferType<typeof OrderCustomerSchema>;
OrderShippingAddressCoordinatesType = yup.InferType<typeof OrderShippingAddressCoordinatesSchema>;
OrderShippingAddressType = yup.InferType<typeof OrderShippingAddressSchema>;
OrderItemsItemType = yup.InferType<typeof OrderItemsItemSchema>;
OrderPaymentSummaryType = yup.InferType<typeof OrderPaymentSummarySchema>;
OrderType = yup.InferType<typeof orderSchema>;
Complexité Structurelle
Profondeur : 45 Sous-schémas
Formats Détectés
3 Règles détectéesEmail, UUID, ISO, URL
Exportations TypeScript
InferType ONsmart

Inférence AST 100% Côté Client

L'analyse syntaxique du JSON et la génération des schémas Yup s'exécutent entièrement dans votre navigateur sans transfert réseau.

Typage Sécurisé Yup et TypeScript InferType

Génère des définitions récursives yup.object(), yup.array().of(), détection de formats et typage TypeScript prêts pour Formik et React Hook Form.

Validation Intelligente et Règles Nullable

Détection automatique des emails, UUIDs, dates ISO, URLs et contraintes numériques avec stratégies de champs requis et nullables configurables.

Référence technique et guide d'architecture

Guide Développeur du Générateur de Schémas de Validation Yup depuis JSON — Guide de référence

Transformez des exemples JSON en schémas de validation d'objets Yup typés avec yup.string(), yup.number(), yup.array() et règles requises.

Paramètres clés et contrôles

Nom du Schéma Racinestring

Identifiant attribué au schéma Yup principal exporté et à sa définition de type TypeScript déduite.

Par défaut : rootSchema
Extraire les Sous-schémasboolean

Décompose les hiérarchies d'objets imbriqués en déclarations de schémas réutilisables et autonomes.

Par défaut : true
Détection Intelligente des Formatsboolean

Détecte automatiquement les emails RFC 5322, UUID, URL et dates ISO 8601, en appliquant .email(), .uuid(), .url() et .date().

Par défaut : true
Stratégie des Champs Requisenum (all | optional | non-null)

Détermine si les propriétés déduites reçoivent .required(), restent .optional() ou dépendent de la nullité des échantillons.

Par défaut : all
Rejeter les Propriétés Inconnues (.noUnknown)boolean

Ajoute .noUnknown() aux schémas d'objets pour rejeter les charges utiles avec des propriétés non définies.

Par défaut : false
Exporter les Types TypeScript InferTypeboolean

Génère export type RootType = yup.InferType<typeof rootSchema>; pour synchroniser les types statiques.

Par défaut : true

Conseils de pro et bonnes practices

Utilisez directement le schéma généré

Utilisez directement le schéma généré dans Formik via validationSchema={rootSchema} ou dans React Hook Form avec useForm({ resolver: yupResolver(rootSchema) }) issu de @hookform/resolvers/yup.

Par défaut

Par défaut, Yup interrompt la validation dès la première erreur. Passez schema.validate(data, { abortEarly: false }) pour collecter l'ensemble des erreurs dans err.inner et afficher un rapport complet du formulaire.

Évitez la duplication d'interfaces en

Évitez la duplication d'interfaces en dérivant vos types TypeScript directement avec export type FormData = yup.InferType<typeof rootSchema>; pour répercuter automatiquement chaque ajustement de schéma.

Nettoyez les entrées utilisateurs

Nettoyez les entrées utilisateurs pendant la validation en chaînant .transform((val) => (val === '' ? null : val)) ou .trim() sur yup.string() pour convertir les chaînes vides en null et retirer les espaces résiduels.

Pièges courants et dépannage

ValidationError ne retourne que le premier message d'erreur au lieu de signaler l'ensemble des champs invalides.

Par défaut, Yup applique abortEarly: true. Lors de l'appel à schema.validate(data) ou schema.validateSync(data), spécifiez { abortEarly: false } et parcourez err.inner pour extraire tous les messages d'erreur.

Les propriétés supplémentaires du JSON disparaissent du résultat validé ou déclenchent des rejets inattendus.

Yup supprime par défaut les clés non déclarées. Pour interdire formellement les propriétés superflues, ajoutez .noUnknown(). Pour conserver ces champs sans les valider, spécifiez { stripUnknown: false } dans les options de validation.

Les timestamps ISO 8601 échouent à la validation ou se transforment en objets Date invalides en JavaScript.

yup.date() convertit les valeurs via new Date(), ce qui échoue sur des chaînes vides. Utilisez .nullable().transform((curr, orig) => orig === '' ? null : curr) ou validez la chaîne avec yup.string().matches() pour respecter la norme ISO.

Foire aux questions (FAQ)

Quelle est la principale différence entre Yup et Zod pour les projets TypeScript ?▼

Les deux bibliothèques assurent la validation à l'exécution. Zod a été conçu nativement pour l'inférence de types TypeScript. Yup bénéficie d'une adoption historique majeure dans l'écosystème React (notamment Formik et React Hook Form), offrant d'excellentes capacités de validation conditionnelle via .when() et de coercition de types.

Comment brancher le schéma Yup généré sur Formik ou React Hook Form ?▼

Pour Formik, transmettez le schéma directement à la propriété validationSchema : <Formik validationSchema={rootSchema} ... />. Pour React Hook Form, installez @hookform/resolvers et paramétrez useForm({ resolver: yupResolver(rootSchema) }).

Comment le générateur gère-t-il les éléments hétérogènes dans les tableaux JSON ?▼

Le générateur parcourt l'ensemble des éléments du tableau. S'ils partagent une structure homogène, il produit un yup.array().of(yup.object({...})). En cas de disparités, il unifie la définition en marquant les propriétés divergentes comme optionnelles.

Mes données JSON ou mon code de validation sont-ils transmis à un serveur distant ?▼

Non. L'analyse syntaxique (AST), la synthèse des règles et l'inférence des types s'effectuent à 100 % localement dans le bac à sable de votre navigateur. Aucune donnée n'est transmise sur le réseau.

Puis-je extraire des types TypeScript du schéma Yup généré sans rédiger d'interfaces manuelles ?▼

Oui. Yup intègre le type utilitaire yup.InferType<typeof schema>. En déclarant export type MyType = yup.InferType<typeof rootSchema>;, vos types statiques TypeScript restent automatiquement synchronisés avec vos règles de validation.

Outils et utilitaires connexes

Tous les outils →
Guide Développeur : Générateur de Schémas de Validation Joi depuis JSONDéveloppement

Convertissez des structures de données JSON en schémas de validation Joi robustes avec les contraintes Joi.object(), Joi.string(), Joi.number() et Joi.array().

Ouvrir l'outil→
Guide Développeur du Convertisseur JSON vers Schéma Apache Avro (.avsc)Développement

Convertissez des charges utiles JSON en schémas Apache Avro (.avsc) prêts pour la production, avec gestion des espaces de noms, types primitifs et logiques, champs union avec null et règles d'évolution.

Ouvrir l'outil→
Guide Développeur : Générateur de Schémas de Validation Zod depuis GraphQL SDLDéveloppement

Convertissez les types, requêtes et inputs GraphQL SDL en schémas de validation Zod à l'exécution (z.object, z.string, z.array) avec prise en charge avancée de la nullabilité.

Ouvrir l'outil→
Guide de développement du convertisseur GraphQL SDL vers types et interfaces TypeScriptDéveloppement

Transformez vos types, inputs et énumérations GraphQL SDL directement en interfaces et types TypeScript propres et sans dépendances.

Ouvrir l'outil→
K8S Configmap Secret Generator Référence DéveloppeurDéveloppement

Utilitaire de développement pour générer des manifestes Kubernetes ConfigMap et Secret avec encodage Base64, stringData, TLS, Docker registry auth et flags de ressources immuables.

Ouvrir l'outil→
Guide Développeur du Générateur Kubernetes HorizontalPodAutoscaler (HPA v2)Développement

Générez des manifestes YAML HPA v2 avec objectifs d'utilisation CPU et mémoire, métriques personnalisées et politiques de stabilisation de mise à l'échelle.

Ouvrir l'outil→