Oh MyUtils

JSON to SQL 변환기 - CREATE TABLE & INSERT 문 생성 온라인

JSON 데이터를 MySQL, PostgreSQL, SQLite, SQL Server용 CREATE TABLE 및 INSERT 문으로 변환 — 100% 브라우저 처리, 서버 전송 없음.

SQL 방언
테이블명
출력 모드
기본 키
중첩 JSON
플래그
JSON 입력
SQL 출력
 

자주 묻는 질문

JSON to SQL 변환기란 무엇인가요?

JSON to SQL 변환기는 JSON 데이터를 SQL 문으로 변환하는 도구입니다. JSON의 구조와 타입을 기반으로 데이터베이스 스키마를 정의하는 CREATE TABLE 문(DDL)과 테이블에 데이터를 채우는 INSERT INTO 문(DML)을 생성합니다. 이 도구는 JSON 값에서 SQL 컬럼 타입을 자동으로 추론합니다: 문자열은 VARCHAR 또는 TEXT, 숫자는 INT 또는 FLOAT, 불리언은 데이터베이스 방언에 따라 BOOLEAN 또는 BIT, 중첩 객체는 JSON 컬럼으로 저장됩니다.

JSON을 SQL 문으로 어떻게 변환하나요?

입력 필드에 JSON 데이터(단일 객체 또는 객체 배열)를 붙여넣으세요. 대상 SQL 방언(MySQL, PostgreSQL, SQLite 또는 SQL Server)을 선택하고, 테이블 이름을 입력하고, 출력 모드(CREATE TABLE + INSERT, CREATE만, INSERT만)를 선택하세요. 도구가 출력 패널에 해당하는 SQL을 즉시 생성합니다. 결과를 클립보드에 복사하기 전에 배치 INSERT 모드, 기본 키 선택, 중첩 JSON 처리 등의 옵션을 사용자 정의할 수 있습니다.

타입 추론은 어떻게 작동하나요?

이 도구는 모든 행의 각 JSON 필드에 있는 모든 값을 분석하여 최적의 SQL 컬럼 타입을 결정합니다. 문자열은 길이에 따라 VARCHAR(255) 또는 TEXT로, 정수는 크기에 따라 INT 또는 BIGINT로, 소수는 FLOAT로, 불리언은 방언별 불리언 타입(PostgreSQL은 BOOLEAN, MySQL은 TINYINT(1), SQL Server는 BIT)으로, null 값은 컬럼을 nullable로 매핑합니다. '2026-03-20'과 같은 ISO 8601 날짜 문자열은 감지되어 DATE 또는 TIMESTAMP 타입으로 매핑됩니다. 중첩 객체와 배열은 JSON/JSONB 컬럼으로 저장됩니다.

SQL 방언 간의 차이점은 무엇인가요?

각 SQL 방언은 식별자, 데이터 타입, 기능에 대해 고유한 구문을 가지고 있습니다. MySQL은 백틱을 사용하고(예: `column_name`), PostgreSQL은 큰따옴표를, SQLite는 큰따옴표를, SQL Server는 대괄호([column_name])를 사용합니다. 불리언 타입도 다릅니다: PostgreSQL은 네이티브 BOOLEAN, MySQL은 TINYINT(1), SQL Server는 BIT를 사용합니다. 자동 증가 구문도 다릅니다: MySQL은 AUTO_INCREMENT, PostgreSQL은 SERIAL, SQLite는 AUTOINCREMENT, SQL Server는 IDENTITY(1,1)을 사용합니다. JSON 저장도 다릅니다: PostgreSQL은 JSONB, MySQL은 JSON, SQLite와 SQL Server는 TEXT/NVARCHAR(MAX)를 사용합니다.

이 도구를 사용할 때 데이터가 안전한가요?

네, 완전히 안전합니다. 이 도구는 클라이언트 측 JavaScript를 사용하여 브라우저에서 모든 것을 처리합니다. JSON 데이터는 컴퓨터를 떠나지 않습니다 — 서버 업로드, API 호출, 데이터 저장이 없습니다. 따라서 프로덕션 데이터베이스 데이터, 민감한 정보가 포함된 API 응답, SQL로 변환해야 하는 모든 기밀 데이터에 안전하게 사용할 수 있습니다.

중첩된 JSON 객체와 배열은 어떻게 처리하나요?

이 도구는 중첩 JSON에 대해 두 가지 전략을 제공합니다. 기본 'JSON 컬럼' 전략은 중첩 객체와 배열을 데이터베이스의 JSON/JSONB 컬럼으로 저장하여 원래 구조를 보존합니다. '평탄화' 전략은 외래 키 관계가 있는 별도의 관련 테이블을 생성하여 데이터를 정규화합니다 — 중첩 객체는 접두사가 붙은 이름의 평탄화된 컬럼이 되고, 객체 배열은 자식 테이블을 생성합니다. 빠른 저장과 유연한 쿼리를 위해서는 JSON 컬럼을, 완전히 정규화된 관계형 스키마 설계를 위해서는 평탄화를 선택하세요.

배치 INSERT 모드란 무엇인가요?

배치 INSERT 모드는 다중 값 구문을 사용하여 여러 행을 하나의 INSERT 문으로 결합합니다: INSERT INTO table VALUES (...), (...), (...). 이는 데이터베이스로의 왕복 횟수를 줄여주기 때문에 대용량 데이터셋을 가져올 때 개별 INSERT 문보다 훨씬 빠릅니다. 문 크기와 성능 간의 균형을 맞추기 위해 배치 크기(기본값: 문당 100행)를 설정할 수 있습니다. 모든 주요 데이터베이스가 이 구문을 지원합니다.

코드 예제

// JSON to SQL converter
function jsonToSql(jsonStr, options = {}) {
  const {
    tableName = 'my_table',
    dialect = 'mysql',
    includeCreate = true,
    includeInsert = true,
  } = options;

  const data = JSON.parse(jsonStr);
  const rows = Array.isArray(data) ? data : [data];
  if (rows.length === 0) return '';

  // Collect all column names
  const columns = [...new Set(rows.flatMap(Object.keys))];

  // Infer types from all rows
  const types = {};
  for (const col of columns) {
    for (const row of rows) {
      const val = row[col];
      if (val === null || val === undefined) continue;
      if (typeof val === 'boolean') types[col] = 'BOOLEAN';
      else if (typeof val === 'number') {
        types[col] = Number.isInteger(val) ? 'INT' : 'FLOAT';
      } else if (typeof val === 'object') types[col] = 'JSON';
      else types[col] = 'VARCHAR(255)';
    }
    if (!types[col]) types[col] = 'VARCHAR(255)';
  }

  const quote = dialect === 'mysql' ? (n) => `\`${n}\``
    : dialect === 'sqlserver' ? (n) => `[${n}]`
    : (n) => `"${n}"`;

  const parts = [];

  if (includeCreate) {
    const colDefs = columns.map(c => `  ${quote(c)} ${types[c]}`);
    parts.push(`CREATE TABLE ${quote(tableName)} (\n${colDefs.join(',\n')}\n);`);
  }

  if (includeInsert) {
    for (const row of rows) {
      const vals = columns.map(c => {
        const v = row[c];
        if (v === null || v === undefined) return 'NULL';
        if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';
        if (typeof v === 'number') return String(v);
        if (typeof v === 'object') return `'${JSON.stringify(v).replace(/'/g, "''")}'`;
        return `'${String(v).replace(/'/g, "''")}'`;
      });
      parts.push(
        `INSERT INTO ${quote(tableName)} (${columns.map(quote).join(', ')}) VALUES (${vals.join(', ')});`
      );
    }
  }

  return parts.join('\n\n');
}

// Example usage
const json = '[{"id":1,"name":"Alice","active":true},{"id":2,"name":"Bob","active":false}]';
console.log(jsonToSql(json, { tableName: 'users', dialect: 'postgresql' }));

관련 도구