把一個 JSON 物件,或一組物件,轉成 TypeScript 介面、Python 類別、Pydantic 模型或 SQL。排版仍用 JSON 格式化
一份 API 範例常常是一個 JSON 物件,或一組物件。這一頁按這個形狀寫出 TypeScript 介面、Python 類別、Pydantic 模型,或一張 CREATE TABLE,每個物件一條 INSERT。排版和修復仍在 JSON 格式化。
{"id":1,"name":"Ada","ok":true,"tags":["a","b"],"meta":{"n":2}},把方向設為 TypeScript 介面,名稱設為 Item,兩個核取方塊都留著。結果有 export interface Item,欄位是 id?: number、name?: string、ok?: boolean、tags?: string[] 和 meta?: ItemMeta,另有 export interface ItemMeta,欄位是 n?: number。item。欄是 id BIGINT NOT NULL、name TEXT NOT NULL、ok BOOLEAN NOT NULL、tags TEXT NOT NULL 和 meta TEXT NOT NULL。INSERT 是 1, 'Ada', 1, '["a","b"]', '{"n":2}'。from dataclasses import dataclass 和 from typing import Optional, List,然後是 @dataclass 類別 ItemMeta,欄位 n: Optional[int] = None,然後是 @dataclass 類別 Item,欄位有 id、name、ok、tags: Optional[List[str]] = None 和 meta: Optional[ItemMeta] = None。再把方向改成 Pydantic 模型:匯入加上 from pydantic import BaseModel,兩個類別都繼承 BaseModel,沒有 @dataclass。顯示範例仍停在 TypeScript 介面。根必須是一個物件,或物件陣列。數字、字串,或一串數字,會報錯停下。沒有鍵的物件也會報錯停下。
TypeScript 用 boolean、number 和 string。其中一種型別的陣列變成 T[]。空陣列變成 unknown[]。巢狀物件變成另一個介面:父名稱加上鍵名,所以 Item 下面的 meta 是 ItemMeta。混在一起的型別變成 unknown。可選屬性給每個欄位加上 ?。根是陣列、而且某個鍵在部分物件裡沒有時,這個欄位仍是可選的,即使可選屬性沒勾。export 寫出 export interface。根是陣列時加上註解 // JSON root is Name[]。
SQL 把名稱轉成小寫,其他字元換成底線,所以 Order Line 變成 order_line。整數是 BIGINT,其他數字是 DOUBLE,布林是 BOOLEAN,寫成 1 或 0,字串是 TEXT。巢狀物件或陣列是 TEXT,裡面放 JSON 文字。字串裡的單引號寫成兩個。某一列上是 null 或缺失的鍵,可以為空。每個物件一條 INSERT。
它是物件,所以 TypeScript 把它命名為 ItemMeta。在 SQL 裡同一個欄位是 TEXT,內容是 {"n":2}。
每個物件變成一列。一串數字沒有欄可寫。