JSON에서 JavaScript 객체 변환기

엄격한 JSON은 JSON.parse로 JavaScript 객체로 변환할 수 있습니다. JavaScript 객체 리터럴은 유효한 JSON이 되기 전에 한 번 정리 작업이 필요합니다.

JavaScript에서 JSON 변환

입력이 이미 유효한 JSON이라면, 가장 안전한 변환기는 JSON.parse(jsonText)입니다. 코드를 실행하지 않고 평범한 JavaScript 객체, 배열, 문자열, 숫자, 불리언, null을 돌려줍니다.

JSON 입력

{ "name": "Ada", "active": true, "skills": ["math", "notes"] }

JavaScript 사용법

const user = JSON.parse(jsonText); console.log(user.name);

객체 리터럴 입력은 다르다

{ name: 'Ada', active: true } 같은 JavaScript 객체 리터럴은 JSON이 아닙니다. JSON.parse에 넘기기 전에, 따옴표 없는 키, 작은따옴표, 주석, 후행 콤마를 수리하세요.

eval을 피해야 할 때

알 수 없는 텍스트를 객체로 만들기 위해 eval을 사용하지 마세요. eval은 코드를 실행합니다. JSON.parse는 데이터만 파싱하므로 — API 페이로드, 설정, 로그, 붙여 넣은 예시에 엄격한 JSON이 더 안전합니다.

경계 사례: 날짜, undefined, 함수

JSON에는 Date, undefined, 함수 타입이 없습니다. 날짜는 ISO 문자열로 왕복하고, undefined는 stringify 시 사라지며, 함수는 표현조차 할 수 없습니다. JavaScript 객체에 이런 값이 있으면 변환된 JSON은 손실이 있는 스냅샷이 됩니다 — 필요하다면 JSON.parse의 reviver 함수로 타입을 명시적으로 복원하세요.

TypeScript와 추론된 타입

JSON.parse는 형태를 미리 알 수 없으므로 'any'를 반환합니다. 타입이 있는 접근을 원한다면, zod나 io-ts 같은 스키마 라이브러리로 검증한 뒤 JSON.parse(text) as User로 반환 타입을 선언하거나, JSON to TypeScript 도구로 샘플에서 인터페이스를 생성하세요.

반대 방향: 객체에서 JSON으로

JSON.stringify(value, null, 2)는 JavaScript 값에서 포매팅된 JSON을 만듭니다. undefined, 함수, Symbol 키는 조용히 버려지고, 순환 참조는 예외를 던집니다. 두 번째 인자로 replacer 함수를 넘기면 어떤 필드가 살아남을지 제어할 수 있어 — 객체를 보내기 전에 내부 정보를 정리하는 데 유용합니다.