JSON 객체, 또는 객체의 배열을 TypeScript interface, Python 클래스, Pydantic 모델 또는 SQL로 만듭니다. 정리는 JSON 포매터
API 예제는 대개 JSON 객체 하나, 또는 객체의 목록입니다. 이 페이지는 그 모양으로 TypeScript interface, Python 클래스, Pydantic 모델을 쓰거나, 객체마다 CREATE TABLE과 INSERT를 하나씩 씁니다. 정리와 복구는 JSON 포매터에 있습니다.
{"id":1,"name":"Ada","ok":true,"tags":["a","b"],"meta":{"n":2}}를 채우고, 방향을 TypeScript interface, 이름을 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 interface에 머뭅니다.루트는 객체 하나이거나 객체의 배열이어야 합니다. 숫자, 문자열, 숫자 배열은 오류로 멈춥니다. 키가 없는 객체도 오류로 멈춥니다.
TypeScript는 boolean, number, string을 씁니다. 그 중 하나의 배열은 T[]가 됩니다. 빈 배열은 unknown[]가 됩니다. 중첩 객체는 다른 interface가 됩니다. 부모 이름에 키를 붙이므로 Item 아래의 meta는 ItemMeta입니다. 섞인 타입은 unknown이 됩니다. 선택적 속성은 모든 필드에 ?를 붙입니다. 루트가 배열이고 어떤 객체에 키가 없으면, 선택적 속성이 꺼져 있어도 그 필드는 선택적입니다. export는 export interface로 씁니다. 배열 루트에는 주석 // JSON root is Name[]가 붙습니다.
SQL은 이름을 소문자로 바꾸고 나머지 문자를 밑줄로 바꿉니다. 그래서 Order Line은 order_line이 됩니다. 정수는 BIGINT, 다른 숫자는 DOUBLE, 불리언은 BOOLEAN이며 1 또는 0으로 쓰고, 문자열은 TEXT입니다. 중첩 객체나 배열은 JSON 텍스트를 담은 TEXT입니다. 문자열 안의 작은따옴표는 두 번 씁니다. 키가 null이거나 어떤 행에 없으면 NULL을 허용합니다. 객체 하나가 INSERT 하나입니다.
객체이므로 TypeScript에서는 ItemMeta라는 이름이 됩니다. SQL에서 같은 필드는 {"n":2}를 담은 TEXT입니다.
객체 하나가 한 행이 됩니다. 숫자 목록에는 열이 없습니다.