把一个 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}。
每个对象变成一行。一串数字没有列可写。