JSON vers TypeScript, Python et SQL

Transforme un objet JSON, ou un tableau d'objets, en interface TypeScript, en classe Python, en modèle Pydantic ou en SQL. La mise en forme reste sur le formateur JSON

Ce que cette page construit

Un échantillon d'API est souvent un objet JSON, ou une liste d'objets. Cette page écrit une interface TypeScript, une classe Python, un modèle Pydantic, ou un CREATE TABLE et un INSERT par objet. La mise en forme et la réparation restent sur le formateur JSON.

Comment l'utiliser

  1. Collez le JSON dans le cadre. Mettre à jour en tapant est activé.
  2. Le mode est Interface TypeScript, SQL CREATE TABLE + INSERT, Classe Python ou Modèle Pydantic. Nom commence à Item. Propriétés facultatives commence coché. La dernière case est export en TypeScript, et imports en Python ou en Pydantic.
  3. Convertir s'exécute une fois. Afficher un exemple remplit {"id":1,"name":"Ada","ok":true,"tags":["a","b"],"meta":{"n":2}}, règle le mode sur Interface TypeScript, Nom sur Item, et laisse les deux cases cochées. Le résultat contient export interface Item avec id?: number, name?: string, ok?: boolean, tags?: string[] et meta?: ItemMeta, plus export interface ItemMeta avec n?: number.
  4. Passez le mode à SQL CREATE TABLE + INSERT. La table est item. Les colonnes sont id BIGINT NOT NULL, name TEXT NOT NULL, ok BOOLEAN NOT NULL, tags TEXT NOT NULL et meta TEXT NOT NULL. L'INSERT est 1, 'Ada', 1, '["a","b"]', '{"n":2}'.
  5. Passez le mode à Classe Python et laissez cochés Propriétés facultatives et imports. Le résultat commence par from dataclasses import dataclass et from typing import Optional, List, puis la classe @dataclass ItemMeta avec n: Optional[int] = None, puis la classe @dataclass Item avec id, name, ok, tags: Optional[List[str]] = None et meta: Optional[ItemMeta] = None. Passez le mode à Modèle Pydantic : les imports ajoutent from pydantic import BaseModel et les deux classes étendent BaseModel, sans @dataclass. Afficher un exemple reste sur Interface TypeScript.
  6. Tout effacer vide les deux cadres. Copier le résultat copie la sortie.

Comment les types sont choisis

La racine doit être un objet, ou un tableau d'objets. Un nombre, une chaîne ou un tableau de nombres s'arrête sur une erreur. Un objet sans clé s'arrête sur une erreur.

TypeScript utilise boolean, number et string. Un tableau de l'un de ces types devient T[]. Un tableau vide devient unknown[]. Un objet imbriqué devient une autre interface : le nom du parent plus la clé, donc meta sous Item est ItemMeta. Les types mélangés deviennent unknown. Propriétés facultatives ajoute ? sur chaque champ. Quand la racine est un tableau et qu'une clé manque à certains objets, ce champ est facultatif même si Propriétés facultatives est décoché. export écrit export interface. Une racine tableau ajoute le commentaire // JSON root is Name[].

SQL met Nom en minuscules et transforme les autres caractères en tirets bas, donc Order Line devient order_line. Les entiers sont BIGINT, les autres nombres sont DOUBLE, les booléens sont BOOLEAN et s'écrivent 1 ou 0, et les chaînes sont TEXT. Un objet ou un tableau imbriqué est TEXT qui contient le texte JSON. Une apostrophe dans une chaîne est doublée. Une clé qui vaut null, ou qui manque sur une ligne, est nullable. Chaque objet est un INSERT.

Où on s'en sert

  • Esquisser une interface TypeScript à partir d'un échantillon d'API.
  • Charger un tableau JSON quand les champs imbriqués peuvent rester du texte JSON.
  • Vérifier qu'une apostrophe dans un nom est stockée comme deux apostrophes.

Questions

Pourquoi meta est-il une seconde interface ?

C'est un objet, donc TypeScript le nomme ItemMeta. En SQL, ce même champ est TEXT contenant {"n":2}.

Pourquoi une liste de nombres a-t-elle échoué ?

Chaque objet devient une ligne. Une liste de nombres n'a pas de colonnes.