T도구모음

JSON 포맷터

JSON 문자열을 포맷하거나, 일반 텍스트를 JSON 문자열로 감쌀 수 있습니다.

모드

JSON 포매터 · 검증기 개요

JSON(JavaScript Object Notation)은 RFC 8259 및 ECMA-404로 표준화된 경량 데이터 교환 포맷입니다. 원래 Douglas Crockford가 JavaScript의 객체 리터럴 하위 집합으로 정의했지만, 오늘날에는 언어 중립적인 포맷으로 REST API, gRPC-JSON transcoding, 설정 파일(package.json, tsconfig.json, composer.json), NoSQL 문서 저장소 (MongoDB BSON의 상위 표현), 구조적 로그(structured logs), OpenAPI/Swagger 스키마 등 거의 모든 백엔드 인터페이스에 쓰입니다. 이 도구는 브라우저에서 완전히 클라이언트 사이드로 동작하므로 민감한 페이로드가 서버로 전송되지 않습니다.

표준 규격 — RFC 8259가 말하는 것

RFC 8259 §3은 JSON 값을 object, array, number, string,true, false, null 7가지로 정의합니다. 실무에서 "6가지 타입"이라고 부르는 것은 true/false를 boolean으로 묶은 관용적 표현입니다. 문자열 인코딩은UTF-8이 기본(MUST)이며(§8.1), BOM은 허용되지 않습니다. 숫자는 IEEE 754 double로 안전하게 표현할 수 있는 범위(±2^53 - 1) 밖에서는 정밀도 손실이 발생할 수 있어, 금융·블록체인 도메인에서는 bigint를 문자열로 직렬화하는 관례가 일반적입니다.

표준 JSON에서 금지된 것들

  • 주석 (//, /* */) — JSON5, JSONC는 확장이지 표준이 아님
  • 마지막 요소 뒤의 쉼표(trailing comma) — ES2017 객체 리터럴은 허용하지만 JSON은 불가
  • 키의 따옴표 생략 — JavaScript 객체와 달리 키는 반드시 "double quotes"
  • 작은따옴표 문자열 — 'value'는 비표준
  • NaN, Infinity, -Infinity — IEEE 754 특수값은 표현 불가
  • 16진수 숫자(0xFF), 선행 0, 후행 점(1.)

입출력 예시 — 포맷팅과 압축

다음 압축된 페이로드를 포맷터에 넣으면 2-스페이스 들여쓰기로 펼쳐집니다.

// 입력 (minified)
{"name":"김철수","age":30,"roles":["admin","editor"],"profile":{"email":"kim@example.com","verified":true}}

// 출력 (prettified)
{
  "name": "김철수",
  "age": 30,
  "roles": [
    "admin",
    "editor"
  ],
  "profile": {
    "email": "kim@example.com",
    "verified": true
  }
}

반대로 압축(minify)은 모든 공백·개행을 제거해 네트워크 전송량을 줄입니다. Brotli/gzip 뒤에서는 차이가 적지만, Edge runtime의 payload limit(Vercel 4MB, Cloudflare Workers 1MB)에 걸릴 때는 minify가 여전히 실용적입니다.

실전 시나리오

  • API 디버깅 — 크롬 DevTools Network 탭에서 Response를 Copy as JSON 하여 붙여넣고 구조 파악
  • 로그 파싱 — pino, winston, Cloud Logging의 structured JSON 로그를 한 줄씩 복붙해 검사
  • 설정 파일 검토 — tsconfig.json의 compilerOptions 정렬 후 PR diff 최소화
  • JWT 페이로드 확인 — Base64 디코딩한 header/payload를 넣어 exp, iat, aud 검증

보안 및 상호운용성 주의

JSON.parse는 프로토타입 오염(prototype pollution)으로부터 안전하지만, 파싱 결과를Object.assign이나 lodash _.merge로 깊게 병합하면__proto__ 키를 통한 공격이 가능합니다(CVE-2019-10744 등). 신뢰할 수 없는 JSON은Object.create(null) 기반 reviver로 받거나 AJV 같은 스키마 검증기로 JSON Schema(Draft 2020-12)를 통과시키는 것이 안전합니다. Windows에서 파일을 열 때 붙는 UTF-8 BOM(EF BB BF)은 RFC 8259에서 금지이므로 Node.js fs.readFile 결과를 그대로 JSON.parse에 넘기면 SyntaxError가 납니다.

관련 도구

Base64로 감싼 JWT 페이로드는 Base64 인코더로 먼저 디코딩하고, 쿼리스트링에 들어 있는 JSON은 URL 인코더로 percent-decode 한 뒤 이 도구에 붙여 넣으세요. DB 컬럼명과 키 네이밍이 안 맞을 때는대소문자 변환기가 유용합니다.

참고 자료

  • IETF RFC 8259 — The JavaScript Object Notation (JSON) Data Interchange Format
  • ECMA-404 2nd edition — The JSON Data Interchange Syntax
  • MDN Web Docs — JSON.parse() / JSON.stringify() reviver & replacer
  • JSON Schema Specification — Draft 2020-12 (json-schema.org)

자주 묻는 질문

관련 도구