Convertisseur SQL → JSON, gratuit
Convertissez des instructions SQL CREATE TABLE en schéma JSON. Extrayez instantanément les noms de colonnes, les types et les contraintes.
À propos de la conversion SQL → JSON
Cet outil analyse les instructions SQL CREATE TABLE et les convertit au format schéma JSON. Il extrait les noms de colonnes, les types de données (INT, VARCHAR, TEXT, BOOLEAN, DATE, TIMESTAMP, DECIMAL) et les contraintes (NOT NULL, PRIMARY KEY, valeurs DEFAULT). La sortie JSON convient à la documentation d'API, à la conception de bases de données ou aux outils de migration.
Types de données SQL pris en charge
- INT / INTEGER · valeurs entières sur 32 bits
- VARCHAR(n) · texte de longueur variable avec longueur max
- TEXT · texte de longueur illimitée
- BOOLEAN / BOOL · valeurs vrai/faux
- DATE · dates calendaires sans heure
- TIMESTAMP · date et heure avec prise en charge du fuseau
- DECIMAL(p,s) · nombres décimaux précis
Questions fréquentes
Quels dialectes SQL sont pris en charge ?
Ce convertisseur gère la syntaxe SQL standard utilisée par MySQL, PostgreSQL, SQL Server et SQLite. Les fonctionnalités spécifiques à un dialecte peuvent ne pas être entièrement reconnues.
Gère-t-il des contraintes complexes ?
Le convertisseur reconnaît NOT NULL, PRIMARY KEY, DEFAULT et les informations de type de base. Les contraintes complexes comme CHECK ou FOREIGN KEY sont stockées sous forme d'annotations texte.
Puis-je utiliser la sortie JSON directement ?
Oui ! La sortie JSON est formatée pour la lisibilité et peut être utilisée dans des schémas d'API, des interfaces TypeScript ou des générateurs de documentation.
Schéma, pas données : ce que fait cet outil
Ce convertisseur prend une instruction SQL CREATE TABLE et produit un schéma JSON : une description des colonnes, des types et des contraintes de base, adaptée aux contrats d'API, à la génération de types TypeScript et aux migrations vers les magasins de documents. Il ne convertit pas les lignes INSERT ni les jeux de résultats de requête en JSON. L'intérêt de recherche pour « SQL to JSON » se partage à peu près en deux entre ces deux besoins ; si vous êtes arrivé en espérant une conversion ligne-vers-objet, il vous faudra un autre outil. Le chemin de conversion de schéma est le cas orienté développeur : vous avez une définition de table et voulez une description structurée de sa forme qu'un autre outil peut consommer.
Une brève histoire de SQL
SQL a été conçu au laboratoire de recherche d'IBM à San Jose au début des années 1970 par Donald D. Chamberlin et Raymond F. Boyce. Le nom d'origine était SEQUEL : Structured English Query Language, conçu comme une interface de plus haut niveau pour la base de données relationnelle expérimentale System R d'IBM. Le modèle relationnel lui-même avait été publié en 1970 par Edgar F. Codd ; la contribution de Chamberlin et Boyce était une syntaxe que des analystes ordinaires pouvaient lire, calquée sur des clauses en anglais naturel (SELECT … FROM … WHERE …) plutôt que sur les symboles algébriques de Codd. Boyce (qui prêterait aussi son nom à la forme normale de Boyce-Codd) est mort en 1974 à l'âge de 26 ans, avant que le langage qu'il a co-inventé ne connaisse une sortie commerciale. Le nom a été changé en SQL en 1975 en raison d'un conflit de marque avec la marque SEQUEL de Hawker Siddeley, bien que la prononciation d'origine « sequel » persiste aux États-Unis aux côtés de l'internationale « ess-cue-ell ».
ANSI a normalisé SQL en 1986 (SQL-86), l'ISO a ratifié une version essentiellement identique en 1987 sous le nom d'ISO/IEC 9075, et la norme a été révisée tous les trois à cinq ans depuis : SQL-92 (toujours la base que supposent la plupart des tutoriels), SQL:1999 (requêtes récursives, déclencheurs), SQL:2003 (type XML, MERGE), SQL:2011 (tables temporelles), SQL:2016 (prise en charge de JSON) et plus récemment SQL:2023 (tableaux multidimensionnels, requêtes de graphes de propriétés). Malgré des vagues de technologies concurrentes (bases de données objet dans les années 1990, NoSQL à la fin des années 2000, lacs de données dans les années 2010), SQL a persisté comme le langage de requête dominant pour les données structurées pendant plus de cinquante ans. En 2024, même la plupart des plateformes NoSQL ont réintroduit SQL ou des couches de type SQL (le CQL de Cassandra, l'étape d'agrégation $sql de MongoDB, le PartiQL de DynamoDB, Spark SQL, Trino, DuckDB, BigQuery, Snowflake), confirmant la prédiction de Mike Stonebraker selon laquelle le langage survivrait à tout moteur de stockage unique.
JSON en un paragraphe
JSON (JavaScript Object Notation) a été spécifié par Douglas Crockford en 2001, dérivé d'un sous-ensemble de la syntaxe des littéraux d'objet JavaScript, et normalisé sous le nom d'ECMA-404 en 2013 et d'IETF RFC 8259 en 2017. Il ne possède que six types de valeurs (chaîne, nombre, booléen, null, tableau, objet) et aucun concept natif de dates, de décimaux, de binaire ou de schémas. Le schéma JSON (une spécification distincte, actuellement au brouillon 2020-12) y superpose une validation de structure et de type. L'intérêt du schéma JSON pour ce convertisseur : c'est un format portable et indépendant du schéma que presque tous les générateurs de code et bibliothèques de validation modernes comprennent.
La conversion mécanique
Une entrée représentative :
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(255) NOT NULL,
signup_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);
Correspond à :
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "users",
"type": "object",
"properties": {
"id": { "type": "integer" },
"email": { "type": "string", "maxLength": 255 },
"signup_at": { "type": "string", "format": "date-time" },
"is_active": { "type": "boolean", "default": true }
},
"required": ["id", "email"]
}
Étape par étape : tokeniser l'entrée, repérer CREATE TABLE et le nom de la table, trouver la liste de colonnes entre parenthèses, découper les définitions de colonnes sur les virgules de premier niveau (en respectant les parenthèses imbriquées pour des choses comme DECIMAL(10,2) ou CHECK (x > 0)), analyser chaque colonne en nom + type + modificateurs, et faire correspondre le type SQL au type de schéma JSON le plus proche. NOT NULL devient l'appartenance au tableau required. DEFAULT devient une valeur default. PRIMARY KEY devient généralement une annotation ou une appartenance à required. CHECK, FOREIGN KEY, UNIQUE et les index deviennent généralement des annotations textuelles parce que le schéma JSON n'a pas d'équivalent direct.
Le problème des dialectes
SQL est notoirement une famille de dialectes, pas un langage unique. Même la mise entre guillemets de base des identifiants diffère :
- MySQL / MariaDB : accents graves :
`column_name`. - PostgreSQL et le standard SQL, guillemets droits :
"column_name". - SQL Server / MS Access : crochets :
[column_name]. - SQLite : permissif, accepte les trois.
Les noms de types divergent aussi. INT(11) dans MySQL est une indication de largeur d'affichage que PostgreSQL rejette. SERIAL dans PostgreSQL est un raccourci pour INT NOT NULL AUTO_INCREMENT PRIMARY KEY ; IDENTITY remplit le même rôle dans SQL Server ; SQLite utilise AUTOINCREMENT. BOOLEAN est en réalité TINYINT(1) sous le capot dans MySQL. Les types géographiques (GEOMETRY, POINT), les types de colonnes JSON (JSON, JSONB), les types tableaux (INTEGER[] de PostgreSQL) et les types vecteurs plein texte (VECTOR(1536) dans pgvector) n'ont pas d'équivalent en schéma JSON et finissent en annotations textuelles opaques. Les données binaires BLOB et BYTEA n'ont pas de représentation JSON native ; la pratique standard est la transformation en chaîne base64 avec une indication contentEncoding.
Types SQL contre types JSON, le décalage d'impédance
SQL a un système de types riche ; JSON a six types de valeurs et aucun schéma. Bon à savoir :
- Types numériques :
INT,BIGINT,SMALLINT,TINYINTse réduisent tous au number de JSON. JavaScript et la plupart des analyseurs JSON utilisent la double précision IEEE 754, qui ne représente exactement que les entiers jusqu'à 2^53. Les valeursBIGINTau-delà perdent en précision lors d'un aller-retour par les analyseurs JSON. Certains pipelines sérialisentBIGINTcomme une chaîne entre guillemets pour préserver la précision ; c'est un motif de conception d'API JSON connu. - Décimal / numérique :
DECIMAL(10,2)pour la monnaie est un type à précision exacte en SQL, mais devient un nombre JSON à virgule flottante avec perte sauf s'il est sérialisé comme une chaîne. Les API financières sérialisent presque toujours la monnaie sous forme de chaînes décimales ("19.99") pour cette raison. - Date / heure / horodatage : JSON n'a pas de type temporel natif. La convention standard est celle des chaînes ISO 8601 (
"2026-05-02T14:30:00Z"), avec l'annotation{ "type": "string", "format": "date-time" }du schéma JSON.TIMESTAMP WITH TIME ZONEdans PostgreSQL préserve l'information de fuseau ;TIMESTAMP WITHOUT TIME ZONEne le fait pas : un aller-retour par JSON aplatit généralement la distinction. - Booléens : correspondance directe
true/false. LeBITde SQL Server arrive souvent sous forme de 1/0 ; ce convertisseur normalise entrue/false. - NULL : le
nullde JSON. À noter que l'absence de clé ({}) est sémantiquement distincte d'un null explicite ({"x": null}) chez la plupart des consommateurs JSON. - Énumérations : le
ENUM('a','b','c')de SQL correspond proprement au{"enum": ["a","b","c"]}du schéma JSON.
Quand recourir à cet outil
- Générer des schémas OpenAPI / Swagger à partir de tables de base de données existantes pour une API qui renvoie la même forme.
- Amorcer des types TypeScript / Zod / io-ts : une fois que vous avez le schéma JSON, des outils comme
quicktypeoujson-schema-to-typescriptproduisent automatiquement les définitions de types. - Migrer de SQL → MongoDB / Firestore / DynamoDB : le premier artefact que vous voulez généralement est une liste de formes de documents ; le schéma JSON est un format intermédiaire propre pour cet exercice de planification.
- Simulation côté frontend : les ingénieurs front-end qui développent face à un backend qui n'existe pas encore ont besoin d'une description JSON de la forme des lignes pour pouvoir générer de fausses données avec
faker.js, MSW oujson-server. - Documentation de dictionnaire de données interne : la documentation des modèles DBT, les wikis de conception, les dépôts de schéma-en-tant-que-code consomment tous des descriptions JSON de formes de tables.
- Génération de fixtures de test : les bibliothèques de tests basés sur les propriétés (
hypothesis,fast-check) et les bibliothèques de fabriques ont besoin d'une description de la forme attendue pour générer des données de test satisfaisantes.
Alternatives modernes
- Sortie JSON native de la base de données. PostgreSQL a
row_to_json(),json_agg()et la famillejsonb_; MySQL aJSON_OBJECT()etJSON_ARRAYAGG(); SQL Server aFOR JSON. Si vous contrôlez la base de données, vous pouvez généralement vous passer entièrement d'un convertisseur et émettre du JSON directement depuis la requête. - Introspection d'ORM. Prisma, Drizzle, SQLAlchemy, TypeORM, Sequelize-auto et des bibliothèques similaires peuvent inspecter les tables existantes et émettre des définitions de types ou des fichiers de schéma dans leurs propres formats, souvent plus proches de ce que vous voulez réellement que le schéma JSON brut.
- Outils de schéma-en-tant-que-code. Atlas (HCL), Liquibase (YAML), Sqitch (SQL) et DBML (Database Markup Language) décrivent les formes de tables dans leurs propres DSL, dotés de vocabulaires de contraintes plus riches que le schéma JSON.
Plus de questions
Et si mon CREATE TABLE a des contraintes FOREIGN KEY ?
Le schéma JSON n'a pas de concept natif de clé étrangère. La représentation la plus propre est une annotation personnalisée (p. ex. une propriété non standard x-foreign-key) notant la table et la colonne référencées. Ce convertisseur préserve la relation sous forme de note textuelle dans la sortie ; si vous avez besoin d'une modélisation de référence totalement formelle, le $ref du schéma JSON + un bloc de définitions séparé est ce qui s'en rapproche le plus, mais c'est peu commode pour les cas plusieurs-à-plusieurs. Pour une modélisation relationnelle plus riche, envisagez DBML ou Atlas HCL.
Pourquoi la sortie n'inclut-elle pas les contraintes CHECK ?
Le schéma JSON peut exprimer de nombreuses contraintes CHECK simples : CHECK (age >= 0) devient {"minimum": 0}, CHECK (status IN ('a','b')) devient {"enum": ["a","b"]} ; mais les expressions SQL arbitraires dans les clauses CHECK (appels de fonction, jointures, sous-requêtes) n'ont pas d'équivalent en schéma JSON. Le convertisseur reconnaît les cas simples et préserve les contraintes complexes sous forme d'annotations textuelles plutôt que de les supprimer silencieusement.
Puis-je convertir des lignes INSERT en JSON ?
Pas avec cet outil : il ne gère que la conversion au niveau du schéma (CREATE TABLE). Pour la conversion au niveau des lignes, la bonne approche est généralement native à la base de données : le SELECT row_to_json(t) FROM tbl t de PostgreSQL, le JSON_OBJECT() de MySQL, ou l'export en CSV suivi d'un outil CSV-vers-JSON. Le mysqldump --xml redirigé via un convertisseur XML-vers-JSON est un autre chemin bien balisé.
Pourquoi BIGINT pose-t-il problème en JSON ?
Le JSON.parse de JavaScript utilise des doubles IEEE 754, qui ne peuvent représenter exactement que les entiers jusqu'à 2^53 = 9 007 199 254 740 992. Les nombres au-delà perdent en précision. Le BIGINT de SQL va jusqu'à 2^63 ≈ 9,2 trillions, bien au-delà de la plage d'entiers JSON sûre. La convention multiplateforme pour transporter sûrement un BIGINT via JSON est de le sérialiser comme une chaîne et de l'analyser avec BigInt à destination ; de nombreuses API (les identifiants de tweets de Twitter / X, les identifiants Stripe, le bigserial de PostgreSQL) font exactement cela.
Quelque chose est-il envoyé à un serveur ?
Non. L'analyseur s'exécute dans votre navigateur ; la sortie JSON est construite localement. Le SQL collé ne quitte jamais votre appareil, ce qui compte si vos instructions CREATE TABLE contiennent des noms de colonnes propriétaires, des conventions de tables internes ou d'autres détails que vous ne voulez pas voir journalisés. La page fonctionne hors ligne une fois chargée.