본문으로 건너뛰기
LeedyBox
후원

JSON / CSV / YAML / SQL / XML 변환기

개발 작업에 자주 쓰는 데이터를 브라우저에서 바로 변환하고 문법을 검사합니다.

변환 형식:

SQL 입력은 INSERT INTO ... VALUES 문(MySQL, PostgreSQL, SQL Server, SQLite 형식)을 지원합니다. SELECT 결과는 CSV로 붙여넣으세요. CSV 값은 텍스트로 읽습니다. XML 속성은 "@attributes" 아래에, 속성이나 자식 요소와 함께 있는 요소 텍스트는 "#text" 아래에 보관됩니다. 모든 처리는 브라우저에서 이루어집니다.

사용하기 전에 결과를 확인하세요. 이 도구는 보증 없이 있는 그대로 제공되며, 결과가 불완전하거나 틀릴 수 있습니다. 이용약관

형식끼리 1:1로 대응하지 않습니다. 데이터 타입, 중첩 값, 특수문자, 아주 큰 숫자는 변환 중에 달라질 수 있습니다. 생성된 SQL은 실제 데이터베이스로 검증되지 않으므로 실제 데이터에 실행하기 전에 복사본에서 먼저 테스트하세요.

사용 방법

  1. "입력 데이터" 칸에 데이터를 붙여넣으세요. "입력" 메뉴는 "자동 감지"로 두거나, 형식을 알고 있다면 JSON, YAML, CSV, SQL, XML 중에서 고르세요.
  2. "변환 형식" 옆의 형식 버튼을 누르세요. 변환된 데이터가 "결과" 칸에 나타나고, 칸 위의 메시지가 변환되었음을 알리면서 정밀도가 손실되었을 수 있는 큰 숫자, 이름이 바뀐 키, 무시된 SQL 문처럼 확인해야 할 사항을 함께 보여 줍니다. 입력을 읽을 수 없으면 메시지에 오류가 표시되고 "결과" 칸은 비워집니다.
  3. 해당 형식에 표시되는 옵션을 조정하세요. 예를 들어 CSV에는 "구분자"와 "중첩 데이터", SQL에는 "SQL 데이터베이스", "구문", "테이블", XML에는 "루트"와 "항목"이 있습니다. 옵션을 바꿀 때마다 현재 입력을 다시 변환하므로 형식 버튼을 다시 누를 필요는 없습니다.
  4. 변환하지 않고 입력만 검사하려면 "문법 검사"를 누르세요. 문법이 올바른지, 아니면 무엇이 잘못되었는지 알려 주며, 파서가 위치를 제공하면 줄과 칸 번호도 함께 표시합니다.
  5. "결과"를 확인한 다음 "결과 복사"를 누르세요. "지우기"를 누르면 두 칸이 모두 비워집니다.

자주 묻는 질문

붙여넣은 데이터가 어딘가로 전송되나요?

아니요. 데이터는 브라우저에서 JavaScript로 해석하고 변환하며, 이 도구는 데이터를 LeedyBox로 업로드하거나 저장하지 않습니다. 페이지를 열 때 leedybox.com에서 YAML용 js-yaml과 CSV용 PapaParse라는 두 오픈소스 라이브러리를 직접 불러오며, 이 라이브러리는 페이지 안에서 실행되고 데이터는 어디로도 전송되지 않습니다.

"자동 감지"는 형식을 어떻게 고르며, 언제 직접 골라야 하나요?

{ 또는 [로 시작하는 입력은 JSON으로, <로 시작하면 XML로 읽습니다. INSERT, CREATE, SET, START, UPDATE, WITH 같은 SQL 키워드 뒤에 공백이 오는 형태나 -- 또는 /* 주석으로 시작하면 SQL로 읽습니다. 그 밖의 입력은 첫 줄에 쉼표, 탭, 세미콜론이 있으면 CSV로 시도하고, 그다음 YAML로 시도합니다. 다음과 같은 경우에는 "입력" 메뉴에서 형식을 직접 고르세요. 첫째, Start date나 Update time으로 시작하는 CSV 머리글 행처럼 CSV나 YAML이 SQL 키워드이기도 한 단어로 시작하면 SQL로 읽혀 실패합니다. 둘째, title: Hello, world 다음 줄에 tags: news, tech가 오는 것처럼 YAML 입력의 모든 줄에 쉼표 수가 같으면 CSV로 읽힐 수 있습니다. 셋째, 파이프(|)로 구분한 CSV나 열이 하나뿐인 CSV는 자동 감지가 인식하지 못합니다. 넷째, YAML이나 CSV 입력이 실패할 때입니다. 자동 감지는 형식을 인식하지 못했다는 사실만 알려 주지만, 형식을 직접 고르면 파서의 오류 메시지와 함께 대부분 오류 위치도 표시됩니다.

주석이나 끝에 붙은 쉼표가 있는 JSON, 한 줄에 객체가 하나씩 있는 JSON도 받나요?

"입력" 메뉴를 JSON으로 설정하면 올바른 JSON만 받으므로, 텍스트가 올바른 JSON인지 확인하려면 이 설정에서 "문법 검사"를 사용하세요. "자동 감지"에서는 { 또는 [로 시작하지만 올바른 JSON이 아닌 입력을 가능하면 YAML 플로 문법으로 읽고 그 사실을 안내합니다. 이때 끝에 붙은 쉼표, 작은따옴표, 따옴표 없는 키도 처리되지만, 따옴표 없는 키는 콜론 뒤에 공백이 있어야 합니다. {a:1}은 이름이 a:1이고 값이 null인 키로 읽히기 때문입니다. //와 /* */ 주석은 YAML에서 주석이 아니어서 키나 값 안에 들어가거나 입력을 읽지 못하게 만들 수 있으니 먼저 지우세요. JSON Lines(NDJSON)는 출력 형식으로는 제공되지만, 두 줄 이상이면 입력으로 읽지 않습니다. 각 줄을 [와 ] 사이에 넣고 마지막 줄을 뺀 모든 줄 끝에 쉼표를 붙이세요.

YAML에서 변환할 때 1.10이 1.1로, 01234가 1234로 바뀌는 이유는 무엇인가요?

따옴표 없는 YAML 값이 숫자처럼 보이면 숫자로 읽으므로, 1.10 같은 버전은 1.1이, 01234 같은 우편번호는 1234가, 0x1F는 31이 됩니다. 이런 값을 텍스트로 유지하려면 YAML에서 따옴표로 감싸세요. 이 변환기는 js-yaml의 core 스키마로 YAML을 읽는데, 이 스키마는 불리언과 날짜를 YAML 1.2 방식으로 처리하므로 yes, no, on, off와 2026-10-02 같은 날짜는 텍스트로 남고, True나 FALSE처럼 true와 false를 표기한 형태만 불리언이 됩니다. JSON을 YAML로 변환할 때는 "01234", "1.10", "yes"처럼 잘못 읽힐 수 있는 문자열을 따옴표로 감싸서 씁니다.

같은 XML 요소가 어떤 파일에서는 객체로, 다른 파일에서는 배열로 바뀌는 이유는 무엇인가요?

같은 부모 아래에서 반복되는 자식 요소는 배열이 되지만, 하나뿐이면 일반 값이나 객체가 됩니다. 그래서 <item>이 하나인 <items>와 두 개인 <items>는 구조가 달라집니다. XML 값은 모두 텍스트로 읽으므로 <id>1</id>은 "1"이 되고 007은 앞의 0이 유지되며, 주석과 처리 명령은 버려집니다. CSV와 SQL로 출력할 때는 <items>처럼 키가 하나인 래퍼 안의 배열에서 행을 가져오므로, <item>이 하나뿐이면 요소 전체가 한 열에 JSON 텍스트로 들어갑니다. CSV에서는 "평탄화 (a.b.c 열)"를 선택하면 여러 열로 나뉩니다.

MySQL이나 PostgreSQL 덤프를 SQL 입력으로 붙여넣어도 되나요?

네, 행이 INSERT INTO ... VALUES 문으로 되어 있다면 가능합니다. CREATE TABLE, SET, LOCK 같은 설정용 문은 건너뛰고, DROP TABLE 같은 그 밖의 문은 안내와 함께 무시하며, 여러 테이블의 행은 하나의 목록으로 합쳐지므로 테이블마다 열이 다르면 한 번에 한 테이블씩 붙여넣으세요. mysqldump는 기본적으로 열 이름을 빼고 출력하므로, --complete-insert 옵션으로 덤프하지 않으면 열 이름이 column1, column2 … 식으로 붙습니다. pg_dump는 기본적으로 행을 COPY 블록으로 쓰는데 이 도구는 이를 읽지 못하므로, 대신 --column-inserts 옵션으로 덤프하세요. 덤프에 함수나 저장 프로시저도 들어 있다면 INSERT 문만 붙여넣으세요. 이 도구는 입력을 세미콜론 기준으로 나누므로, 함수 본문 안의 INSERT가 데이터로 읽히거나 변환이 중단될 수 있습니다.

CSV의 숫자가 따옴표로 감싸여 나오는 이유는 무엇이며, "CREATE TABLE + INSERT"는 어떤 열 타입을 쓰나요?

CSV 값은 모두 텍스트로 처리됩니다. 그래서 01234 같은 앞자리 0은 유지되지만, 42는 JSON에서 "42", SQL에서 '42'가 되고, 빈 셀은 null이나 NULL이 아니라 빈 문자열이 됩니다. 열 타입은 그 열에 든 값을 보고 정하므로, CSV로 만든 테이블은 텍스트 열이 됩니다. 기본은 VARCHAR(255)이고 255자보다 긴 값이 있으면 TEXT입니다(SQL Server는 NVARCHAR(255) 또는 NVARCHAR(MAX), SQLite는 TEXT). 입력이 JSON이나 YAML이고 한 열의 값이 모두 따옴표 없는 숫자이거나 모두 true 또는 false이면, 그 열은 숫자나 불리언 타입이 됩니다. 정수는 데이터베이스와 숫자 크기에 따라 INT, INTEGER, BIGINT 중 하나가 되고, 소수는 부동소수점 타입, 불리언은 BOOLEAN(SQL Server는 BIT, SQLite는 INTEGER)이 됩니다. 생성된 문에는 기본 키, 인덱스, NOT NULL 제약 조건이 없으므로 테이블에 필요하다면 실행하기 전에 추가하세요.