JSON파싱과 직렬화

JSON.parse and JSON.stringify

JavaScript에서 JSON.parse와 JSON.stringify로 문자열과 값을 오가는 기본 흐름, replacer, reviver, 직렬화 제한을 정리합니다.

마지막 수정 2026년 3월 20일

기본 패턴

js
const text = '{"name":"Kim","score":42}';
const data = JSON.parse(text);

const pretty = JSON.stringify(data, null, 2);

설명

  • JSON.parse()는 JSON 문자열을 JavaScript 값으로 바꿉니다. 문자열이 유효하지 않으면 SyntaxError를 던집니다.
  • JSON.stringify()는 JavaScript 값을 JSON 문자열로 바꿉니다. 이때 replacerspace 인수로 필터링과 pretty-print를 조정할 수 있습니다.
  • reviver는 parse 후 값을 변환할 때 쓰며, 중첩된 값부터 depth-first로 적용됩니다.
  • undefined, 함수, Symbol은 JSON 값이 아니어서 JSON.stringify()에서 object에서는 빠지고 array에서는 null로 바뀔 수 있습니다.
  • BigInt는 기본적으로 직렬화할 수 없어서 예외를 던집니다. 큰 정밀도 수치가 필요하면 string으로 보내는 설계를 자주 택합니다.

짧은 예제

js
const text = '{"gross_gdp":12345678901234567890}';

const parsed = JSON.parse(text, (key, value, context) => {
  if (key === "gross_gdp") {
    return BigInt(context.source);
  }
  return value;
});

빠른 정리

함수역할
JSON.parse(text)문자열을 값으로 변환
reviverparse 후 값 변환
JSON.stringify(value)값을 문자열로 변환
replacer직렬화 대상과 형태 조정
space들여쓰기와 pretty-print

주의할 점

JSON.stringify() 결과가 "모든 값이 그대로 보존된 문자열"이라고 생각하면 위험합니다. undefined, 함수, Symbol, BigInt처럼 JSON 바깥 값은 빠지거나 예외가 나므로, 직렬화 전후의 타입 보존이 필요한 데이터는 별도 규칙을 설계해야 합니다.

참고 링크

2 sources