JSON 변환기: 자바스크립트 객체를 엄격한 JSON으로
키에 따옴표가 없거나 작은따옴표, 주석, 마지막 쉼표가 들어 있는 자바스크립트 객체를 붙여넣으면 엄격하고 이스케이프된 JSON으로 바꿔 줘요. 이 JSON 변환기는 파서가 텍스트를 읽기만 하고 코드로는 절대 실행하지 않아요. 그래서 콘솔이나 설정 파일, 코드 예제에서 가져온 텍스트도 그대로 붙여넣을 수 있어요.
JSON 변환기 사용 방법
- 자바스크립트 객체 또는 JSON 칸에 객체를 붙여넣으세요. 붙여넣는 즉시 변환돼요. 직접 입력하면 입력을 멈춘 뒤 약 300밀리초 후에 결과가 바뀌어요.
- 형식에서 결과의 모양을 고르세요. 압축(기본값, 한 줄), 공백 2칸, 공백 4칸 중에서 선택할 수 있어요.
- 결과는 엄격한 JSON 아래에 나와요. 그 밑에 “엄격한 JSON으로 변환했어요.”라는 안내와 글자 수가 표시돼요.
- 결과 바로 아래의 복사를 누르세요. 버튼이 잠깐 복사했어요로 바뀌어요.
- 칸을 비우고 다시 시작하려면 지우기를 누르세요.
간단한 예시예요. {name: 'Ana', tags: ['a', 'b',], id: 0xFF}를 붙여넣어요. 압축을 선택했다면 결과는 {"name":"Ana","tags":["a","b"],"id":255}예요.
읽을 수 있는 느슨한 자바스크립트 문법
텍스트는 JSON5 파서로 읽어요. 자바스크립트 객체 리터럴이 JSON과 다른 부분을 알고 있어서, 아래 형태는 거부하지 않고 변환해요.
- 따옴표 없는 키:
{name: "Ana"}는{"name":"Ana"}가 돼요. - 작은따옴표 문자열:
{a: 'x'}는{"a":"x"}가 돼요. - 마지막 쉼표:
[1, 2,]는[1,2]가 돼요. - 주석:
// 메모와/* 메모 */는 제거돼요. - 16진수:
0xFF는255가 돼요. - 앞의 플러스나 소수점만 있는 표기:
+1,.5,5.는1,0.5,5가 돼요. - NaN과 Infinity:
{a: Infinity}는{"a":null}이 돼요. - 백슬래시로 여러 줄에 나눈 문자열은 줄바꿈 없는 하나의 문자열이 돼요.
문자열 안의 따옴표, 백슬래시, 줄바꿈은 자동으로 이스케이프돼요. 예를 들어 'He said "hi"'는 "He said \"hi\""로 나와요. 이미 올바른 JSON이라면 선택한 배치만 달라지고 나머지는 그대로 통과해요.
한 줄 압축과 공백 2칸, 4칸 들여쓰기
결과 위에 형식 메뉴가 있어요. 압축은 공백 없이 한 줄로 쓰기 때문에 요청 본문, 테스트 데이터, 문자열 안에 붙여넣을 값에 알맞아요.
공백 2칸과 공백 4칸은 읽기 쉽고 차이를 비교하기 좋은 들여쓰기 배치예요. 고르는 즉시 결과가 바뀌고, 복사는 화면에 보이는 내용을 그대로 복사해요.
읽을 수 없는 것과 오류 메시지
받아들이는 것은 데이터뿐이고 코드는 안 돼요. 파서가 멈추면 빨간 상자에 읽을 수 없어요라는 제목과 함께 이유, 그리고 “1행, 6열” 같은 위치가 표시돼요. 예를 들어 {a:1 b:2}는 b에서 멈추고, 바로 앞에 쉼표, 콜론, 괄호, 따옴표가 빠지지 않았는지 확인하라고 알려 줘요. 괄호나 중괄호, 따옴표가 열린 채로 텍스트가 끝나면 대신 “텍스트가 너무 일찍 끝나요.”라고 나와요.
const x = {a: 1}: 첫 글자에서 멈춰요. 객체만 붙여넣으세요.{a: 1};: 마지막 세미콜론에서 멈춰요. 세미콜론을 지우세요.- 백틱 문자열(템플릿)은 받아들이지 않아요. 작은따옴표나 큰따옴표를 쓰세요.
undefined, 함수,new Date()는 받아들이지 않아요. 코드이거나 JSON으로 나타낼 수 없기 때문이에요. 날짜는 문자열로 쓰세요.- 쉼표, 콜론, 괄호가 빠졌다면 빠진 자리 다음 글자에서 멈추고 행과 열을 알려 줘요.
숫자, 중복 키 등 달라지는 점
결과는 브라우저의 JSON.stringify가 만들기 때문에 숫자는 자바스크립트 숫자예요. 복사하기 전에 알아 두면 좋은 점은 다음과 같아요.
9007199254740991보다 큰 정수는 정밀도를 잃어요.12345678901234567890은12345678901234567000이 돼요.1.0은1이,0xFF는255가 돼요.- NaN, Infinity, -Infinity는
null이 돼요. - 같은 키가 두 번 나오면 마지막 값이 남아요.
이미 올바른 JSON이고 모든 자릿수를 그대로 둔 채 들여쓰기만 하고 싶다면 “JSON 포맷터”를 쓰세요. 스키마로 JSON을 검사하려면 “JSON 스키마 검증기”를 쓰세요.
제한과 개인정보
- 최대 5,000,000자까지 입력할 수 있어요. 그보다 긴 텍스트는 한도를 알려 주는 메시지와 함께 거부돼요.
- 파싱할 때 텍스트를 실행하지 않으므로, 붙여넣은 코드가 실행될 일은 없어요.
- 텍스트는 모두 기기 안에서 변환돼요. 업로드되거나 저장되는 것은 없어요.
자주 묻는 질문
자바스크립트 객체를 JSON으로 바꾸려면 어떻게 하나요?
“자바스크립트 객체 또는 JSON” 칸에 객체를 붙여넣으세요. 붙여넣는 즉시, 직접 입력할 때는 멈춘 뒤 약 300밀리초 후에 변환되고, 엄격한 JSON이 “엄격한 JSON” 아래에 나와요. “복사”를 누르면 가져갈 수 있어요. 객체만 붙여넣고, const data = {...}; 같은 줄은 넣지 마세요.
작은따옴표를 큰따옴표로 바꾸려면 어떻게 하나요?
텍스트를 붙여넣으세요. 작은따옴표 문자열은 모두 큰따옴표로 나오고, 그 안의 큰따옴표는 자동으로 이스케이프돼요. 그래서 'He said "hi"'는 "He said \"hi\""가 돼요. 바뀌는 것은 문자열과 키뿐이라서 큰따옴표 문자열 안의 아포스트로피는 그대로예요.
JSON의 마지막 쉼표는 어떻게 없애나요?
텍스트를 붙여넣으세요. [1, 2,]처럼 객체나 배열의 마지막 항목 뒤에 있는 쉼표는 입력으로는 받아들여지고, “엄격한 JSON” 결과에서는 빠져요. 데이터의 다른 부분은 달라지지 않아요.
JSON에 따옴표 없는 키나 주석을 쓸 수 있나요?
엄격한 JSON에서는 쓸 수 없어요. 모든 키와 문자열에 큰따옴표가 필요하고 주석 문법도 없어요. 자바스크립트 객체나 설정 파일에는 둘 다 자주 들어 있어요. 이 도구는 그것들을 읽어서 키를 큰따옴표로 쓰고 주석을 지우므로 결과가 올바른 JSON이 돼요.
JSON과 JSON5는 무엇이 다른가요?
JSON5는 JSON보다 느슨한 상위 집합이에요. 따옴표 없는 키, 작은따옴표 문자열, 마지막 쉼표, 주석, 16진수 같은 자바스크립트식 표기를 허용해요. 이 도구는 그런 문법을 읽어서 일반 JSON으로 써 줘요. 그래서 지원하지 않는 값이 없는 JSON5 문서라면 어떤 파서든 받아들이는 JSON으로 바뀌어요.
JSON을 한 줄로 압축하거나 공백 2칸, 4칸으로 들여쓰려면 어떻게 하나요?
결과 위의 “형식” 메뉴를 쓰세요. 기본값인 “압축”은 공백 없는 한 줄이에요. 공백 2칸과 공백 4칸은 들여쓴 모양이에요. 다른 항목을 고르면 결과와 “복사”로 가져가는 내용이 바로 바뀌어요.
“읽을 수 없어요”라고 나오는 이유가 뭔가요?
파서가 이해하는 객체, 배열, 값이 아니기 때문이에요. 빨간 상자에 멈춘 위치(예: “1행, 6열”)와 확인할 점이 나와요. 바로 앞에 쉼표, 콜론, 괄호, 따옴표가 빠졌는지, 아니면 끝에 괄호, 중괄호, 따옴표가 열린 채로 남았는지 확인하세요. const x = {...} 같은 문장, 마지막 세미콜론, 백틱 문자열, undefined, 함수, new Date()는 받아들이지 않아요. 객체만 붙여넣으세요.
JSON 변환 사이트에 붙여넣은 자바스크립트는 실행되나요?
아니요. 텍스트는 파서(JSON5)가 읽을 뿐 eval은 쓰지 않아서, 붙여넣은 내용이 실행될 수 없어요. 함수나 변수 이름, new Date()가 오류로 나오는 것도 같은 이유예요. 평가할 대상이 아니라 오류로 처리돼요.
JSON 이스케이프 처리는 어떻게 하나요?
따로 할 일은 없어요. 문자열 안의 따옴표, 백슬래시, 줄바꿈은 결과에서 \", \\, \n으로 써져요. 이 도구는 JSON 전체를 다른 문자열에 넣으려고 하나의 이스케이프된 문자열로 감싸 주지는 않고, JSON 자체를 줘요.
JSON.stringify 사용법과 뭐가 다른가요? 큰 숫자는 왜 바뀌나요?
결과를 JSON.stringify로 만들어서 출력 규칙은 같아요. 다른 점은 입력이에요. JSON.stringify는 코드 속의 실제 객체가 필요하지만, 여기서는 객체의 텍스트를 붙여넣고 느슨한 문법도 쓸 수 있어요. 숫자는 자바스크립트 숫자라서 9007199254740991보다 큰 정수는 정밀도를 잃고 1.0은 1이 돼요. 변환은 기기 안에서 이루어지고 업로드나 저장은 없어요.