Ce que fait cet outil
Un échantillon JSON devient un CREATE TABLE.
{ "id": 1, "firstName": "Ada", "score": 9.5, "address": { "city": "Paris" } }
CREATE TABLE `root` (
`id` BIGINT NOT NULL,
`first_name` VARCHAR(255) NOT NULL,
`score` DOUBLE NOT NULL,
`address` JSON NOT NULL
);
Les noms de colonnes sont en snake_case entre accents graves : un mot réservé ou un tiret dans une clé ne pose donc pas de problème. Deux clés qui donnent le même nom sont suffixées plutôt que fondues.
Une colonne à la taille de la valeur
Les chaînes deviennent VARCHAR(255) — sauf quand l’échantillon montre qu’elles n’y tiennent pas :
{ "bio": "…301 caractères…" }
`bio` TEXT NOT NULL
MySQL en mode strict — le défaut depuis 5.7 — refuse une valeur plus longue que la colonne avec l’erreur 1406. Un VARCHAR(255) ici vous aurait rendu une table incapable de contenir le document qui l’a engendrée. C’était un vrai défaut, trouvé en écrivant cette page puis corrigé.
La borne vient de la plus longue valeur de l’échantillon : c’est un plancher, pas une promesse. Si vos chaînes de production sont plus longues que ce que vous avez collé, élargissez la colonne.
Toutes les lignes, pas seulement la première
[{ "a": 1 }, { "a": 2, "b": "x" }]
CREATE TABLE `root_item` (
`a` BIGINT NOT NULL,
`b` VARCHAR(255) NULL
);
La table était bâtie sur le seul premier objet : la deuxième ligne de votre propre échantillon échouait donc à l’insertion — Unknown column 'b'. Les colonnes sont maintenant l’union de tous les objets, et une clé absente de certains est nullable, parce qu’elle l’est.
Le type suit la même règle. Une clé qui vaut 1 sur une ligne et "x" sur la suivante prenait le type de la première rencontrée, et l’autre valeur n’avait plus de colonne où aller ; elle reçoit maintenant une colonne JSON, qui tient les deux. Une valeur de 300 caractères qui n’apparaît qu’à la dixième ligne élargit la colonne en TEXT comme si elle avait été la première.
Ce qui n’est pas inventé
- Ni clé primaire, ni index, ni clause de moteur ou de jeu de caractères. Ce sont des décisions sur vos données et votre serveur ; un document n’en dit rien.
NOT NULLpartout où une valeur était présente,NULLpour unnullet pour une clé absente de certaines lignes.- Les objets et les tableaux deviennent des colonnes
JSON. Pas de table liée, pas de clé étrangère : un échantillon ne peut pas montrer une relation, et en inventer une empilerait trois suppositions.
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.