JSON a TypeScript, Python y SQL

Convierte un objeto JSON, o un array de objetos, en una interfaz TypeScript, una clase Python, un modelo Pydantic o SQL. El formato bonito sigue en el formateador JSON

Qué construye esta página

Una muestra de API suele ser un objeto JSON, o una lista de objetos. Esta página escribe una interfaz TypeScript, una clase Python, un modelo Pydantic, o un CREATE TABLE y un INSERT por objeto. El formato y la reparación siguen en el formateador JSON.

Cómo usarla

  1. Pegue el JSON en el cuadro. Actualizar al escribir está activado.
  2. El modo es Interfaz TypeScript, SQL CREATE TABLE + INSERT, Clase Python o Modelo Pydantic. Nombre empieza en Item. Propiedades opcionales empieza marcado. La última casilla es export en TypeScript, e imports en Python o Pydantic.
  3. Convertir se ejecuta una vez. Mostrar ejemplo rellena {"id":1,"name":"Ada","ok":true,"tags":["a","b"],"meta":{"n":2}}, pone el modo en Interfaz TypeScript, Nombre en Item y deja las dos casillas marcadas. El resultado tiene export interface Item con id?: number, name?: string, ok?: boolean, tags?: string[] y meta?: ItemMeta, más export interface ItemMeta con n?: number.
  4. Cambie el modo a SQL CREATE TABLE + INSERT. La tabla es item. Las columnas son id BIGINT NOT NULL, name TEXT NOT NULL, ok BOOLEAN NOT NULL, tags TEXT NOT NULL y meta TEXT NOT NULL. El INSERT es 1, 'Ada', 1, '["a","b"]', '{"n":2}'.
  5. Cambie el modo a Clase Python y deje marcadas Propiedades opcionales e imports. El resultado empieza con from dataclasses import dataclass y from typing import Optional, List, luego la clase @dataclass ItemMeta con n: Optional[int] = None, luego la clase @dataclass Item con id, name, ok, tags: Optional[List[str]] = None y meta: Optional[ItemMeta] = None. Cambie el modo a Modelo Pydantic: los imports añaden from pydantic import BaseModel y ambas clases extienden BaseModel, sin @dataclass. Mostrar ejemplo se queda en Interfaz TypeScript.
  6. Borrar todo vacía los dos cuadros. Copiar resultado copia la salida.

Cómo se eligen los tipos

La raíz debe ser un objeto, o un array de objetos. Un número, una cadena o un array de números se detiene con un error. Un objeto sin claves se detiene con un error.

TypeScript usa boolean, number y string. Un array de uno de esos tipos se vuelve T[]. Un array vacío se vuelve unknown[]. Un objeto anidado se vuelve otra interfaz: el nombre del padre más la clave, así que meta bajo Item es ItemMeta. Los tipos mezclados se vuelven unknown. Propiedades opcionales añade ? en cada campo. Cuando la raíz es un array y a algún objeto le falta una clave, ese campo es opcional aunque Propiedades opcionales esté desmarcado. export escribe export interface. Una raíz que es un array añade el comentario // JSON root is Name[].

SQL pasa Nombre a minúsculas y convierte los demás caracteres en guiones bajos, así Order Line se vuelve order_line. Los enteros son BIGINT, los demás números son DOUBLE, los booleanos son BOOLEAN y se escriben como 1 o 0, y las cadenas son TEXT. Un objeto o un array anidado es TEXT con el texto JSON. Una comilla simple dentro de una cadena se duplica. Una clave que es null, o que falta en alguna fila, admite nulos. Cada objeto es un INSERT.

Dónde se usa

  • Preparar una interfaz TypeScript a partir de una muestra de API.
  • Cargar un array JSON cuando los campos anidados pueden quedarse como texto JSON.
  • Comprobar que una comilla dentro de un nombre se guarda como dos comillas.

Preguntas

¿Por qué meta es una segunda interfaz?

Es un objeto, así que TypeScript lo llama ItemMeta. En SQL ese mismo campo es TEXT con {"n":2}.

¿Por qué falló una lista de números?

Cada objeto se vuelve una fila. Una lista de números no tiene columnas.