MODOO HUB ← 모두의 툴
Data · Instrument

SQL to JSON

SQL INSERT 또는 CSV → JSON 배열 변환

SQL to JSON 변환기

값을 나누는 splitCSVLine 함수는 문자를 하나씩 훑으며 따옴표를 만날 때마다 '따옴표 안' 여부를 나타내는 플래그 하나만 뒤집을 뿐, 따옴표 문자 자체는 결과에 포함하지 않습니다. 그래서 이후 코드에 있는 "값이 따옴표로 감싸여 있는지" 검사하는 정규식은 이미 따옴표가 다 제거된 값을 보게 되어 사실상 한 번도 참이 되지 않는 죽은 코드이며, 'O''Brien'처럼 SQL에서 작은따옴표를 이스케이프하려고 두 번 겹쳐 쓴 부분은 보존되지 않고 통째로 사라져 "OBrien"이 됩니다. 또한 이 플래그는 작은따옴표와 큰따옴표를 구분하지 않고 공유하기 때문에, 한 값 안에 두 종류 따옴표가 섞여 있으면 그 안의 쉼표가 필드 구분자로 잘못 인식될 수 있습니다.

자주 묻는 질문

SQL에서 이스케이프된 작은따옴표('')가 실제로 보존되나요?

아니요. 'O''Brien'처럼 작은따옴표를 두 번 겹쳐 이스케이프한 부분은 문자를 하나씩 읽는 파서가 두 번째 따옴표까지 '따옴표 종료'로 오인해버려, 실제 아포스트로피 문자 없이 "OBrien"으로 통째로 사라집니다.

"값이 따옴표로 감싸여 있는지" 판단하는 정규식이 실제로 동작하나요?

사실상 동작하지 않습니다. 이 정규식이 검사하는 시점에는 이미 앞 단계의 문자 스캐너가 따옴표 문자를 전부 제거한 뒤이므로, 검사 대상 값에 따옴표가 남아있을 수 없어 이 조건은 항상 거짓이 되는 죽은 코드입니다.

한 값 안에 작은따옴표와 큰따옴표를 섞어 쓰면 어떻게 되나요?

문제가 생길 수 있습니다. '따옴표 안' 여부를 나타내는 플래그가 두 종류의 따옴표를 구분하지 않고 하나로 공유되므로, 큰따옴표로 감싼 값 안에 작은따옴표(아포스트로피)가 들어있으면 그 시점에 플래그가 꺼져버려 그 뒤에 나오는 쉼표가 필드 구분자로 잘못 처리될 수 있습니다.

INSERT 문을 여러 개 한 번에 붙여넣으면 각각의 컬럼명이 정확히 적용되나요?

아니요. 컬럼명은 입력에서 처음 매칭된 INSERT 문에서 딱 한 번만 읽어와 이후 발견되는 모든 INSERT 문에 그대로 재사용합니다. 서로 다른 테이블·컬럼 구성의 INSERT 문을 여러 개 붙여넣으면 두 번째 문장부터는 실제 컬럼명이 무시되고 첫 번째 문장의 컬럼명이 잘못 적용될 수 있습니다.

NULL 값은 어떻게 처리되나요?

따옴표 없이 쓰인 NULL(대소문자 무관)은 JSON의 null로 변환됩니다.

숫자와 문자열은 실제로 어떤 기준으로 구분되나요?

앞서 설명했듯 따옴표 유무로 문자열을 판별하는 코드는 죽어 있으므로, 실제로는 값이 숫자 형식 정규식(-?\d+(\.\d+)?)과 일치하는지만으로 숫자/문자열이 갈립니다. 숫자 패턴에 맞지 않고 NULL도 아니면 원래 따옴표로 감쌌든 아니든 그대로 문자열로 남습니다.

CSV 모드에서 큰따옴표로 감싼 값 안의 쉼표도 안전하게 처리되나요?

단순한 경우(따옴표 하나로만 감싸고 내부에 다른 따옴표가 없는 경우)는 안전하게 처리됩니다. 다만 이스케이프된 ""(RFC 4180 방식)나 따옴표가 섞인 값은 위에서 설명한 것과 같은 방식으로 잘못 분리될 수 있습니다.

변환 중에 데이터가 서버로 전송되나요?

아니요. 정규식 파싱과 JSON 직렬화 모두 브라우저 안에서만 이루어지며, 입력한 SQL이나 CSV는 어디로도 전송되지 않습니다.