본문으로 건너뛰기

JSON Formatter/Validator

JSON의 유효성을 검사하고 포맷팅하는 무료 온라인 도구입니다.

?JSON을 입력하세요

📝 입력 JSON

줄: 0문자: 0크기: 0 bytes

✨ 결과

JSON (JavaScript Object Notation)의 유효성을 검사하고 포맷팅합니다. 들여쓰기를 추가하여 가독성을 높이거나, 공백을 제거하여 크기를 줄일 수 있습니다.

JSON이란?

JSON (JavaScript Object Notation)은 경량 데이터 교환 형식입니다. 사람이 읽고 쓰기 쉽고, 기계가 파싱하고 생성하기 쉽습니다. 웹 API, 설정 파일, 데이터 저장 등에 널리 사용됩니다.

주요 기능

  • 유효성 검사: JSON 문법 오류 실시간 감지
  • 포맷팅 (Prettify): 들여쓰기 추가로 가독성 향상
  • 압축 (Minify): 공백 제거로 크기 감소
  • 실시간 통계: 줄 수, 문자 수, 바이트 크기 표시
  • 들여쓰기 설정: 2/4/8 스페이스 선택
  • 샘플 로드: 예제 JSON으로 빠른 테스트

사용 방법

JSON 유효성 검사

  1. JSON을 입력 영역에 붙여넣습니다
  2. 실시간으로 유효성이 검사됩니다
  3. 오류가 있으면 상세한 오류 메시지가 표시됩니다

JSON 포맷팅

  1. JSON을 입력합니다
  2. 들여쓰기 크기를 선택합니다 (2/4/8 spaces)
  3. "포맷팅" 버튼을 클릭합니다
  4. 정돈된 JSON이 출력됩니다

JSON 압축

  1. JSON을 입력합니다
  2. "압축" 버튼을 클릭합니다
  3. 공백이 제거된 한 줄 JSON이 출력됩니다

JSON 기본 문법

데이터 타입

1. 객체 (Object)

{
"name": "John",
"age": 30
}

2. 배열 (Array)

["apple", "banana", "orange"]

3. 문자열 (String)

"Hello World"

4. 숫자 (Number)

42
3.14
-10

5. 불린 (Boolean)

true
false

6. null

null

중첩 구조

{
"user": {
"name": "John Doe",
"age": 30,
"emails": ["john@example.com", "doe@example.com"],
"address": {
"city": "New York",
"country": "USA"
},
"active": true,
"lastLogin": null
}
}

일반적인 JSON 오류

1. 후행 쉼표 (Trailing Comma)

// ❌ 잘못됨
{
"name": "John",
"age": 30, ← 마지막 쉼표
}

// ✅ 올바름
{
"name": "John",
"age": 30
}

2. 따옴표 누락

// ❌ 잘못됨
{
name: "John" ← 키에 따옴표 없음
}

// ✅ 올바름
{
"name": "John"
}

3. 작은따옴표 사용

// ❌ 잘못됨
{
'name': 'John' ← 작은따옴표
}

// ✅ 올바름
{
"name": "John"
}

4. 주석 사용

// ❌ 잘못됨
{
// 이것은 주석입니다
"name": "John"
}

// ✅ JSON은 주석을 지원하지 않음
// JSONC 또는 JSON5 사용 필요

5. 정의되지 않은 값

// ❌ 잘못됨
{
"name": "John",
"age": undefined ← undefined는 JSON에 없음
}

// ✅ 올바름 (null 사용)
{
"name": "John",
"age": null
}

사용 사례

1. API 응답 디버깅

// API에서 받은 응답을 포맷팅하여 확인
{
"status": "success",
"data": {
"users": [
{"id": 1, "name": "John"},
{"id": 2, "name": "Jane"}
]
}
}

2. 설정 파일 작성

// package.json, tsconfig.json 등
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"react": "^18.0.0"
}
}

3. 데이터 저장

// 로컬 스토리지, 파일 저장 등
{
"theme": "dark",
"language": "ko",
"notifications": true
}

4. 로그 분석

// 구조화된 로그
{
"timestamp": 1640995200,
"level": "error",
"message": "Connection failed",
"details": {
"host": "api.example.com",
"port": 443
}
}

5. 테스트 데이터

// 목(mock) 데이터 생성
{
"users": [
{"id": 1, "name": "Test User 1"},
{"id": 2, "name": "Test User 2"}
]
}

프로그래밍 언어별 사용법

JavaScript

// JSON → 객체 (파싱)
const obj = JSON.parse('{"name":"John","age":30}');
console.log(obj.name); // "John"

// 객체 → JSON (문자열화)
const json = JSON.stringify(obj);
console.log(json); // '{"name":"John","age":30}'

// 포맷팅 (들여쓰기 2칸)
const formatted = JSON.stringify(obj, null, 2);

Python

import json

# JSON → 딕셔너리
data = json.loads('{"name":"John","age":30}')
print(data['name']) # "John"

# 딕셔너리 → JSON
json_str = json.dumps(data)

# 포맷팅
formatted = json.dumps(data, indent=2)

PHP

<?php
// JSON → 배열
$data = json_decode('{"name":"John","age":30}', true);
echo $data['name']; // "John"

// 배열 → JSON
$json = json_encode($data);

// 포맷팅
$formatted = json_encode($data, JSON_PRETTY_PRINT);
?>

Java

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

// JSON → 객체
Gson gson = new Gson();
User user = gson.fromJson(jsonString, User.class);

// 객체 → JSON
String json = gson.toJson(user);

// 포맷팅
Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
String formatted = prettyGson.toJson(user);

C#

using System.Text.Json;

// JSON → 객체
var user = JsonSerializer.Deserialize<User>(jsonString);

// 객체 → JSON
var json = JsonSerializer.Serialize(user);

// 포맷팅
var options = new JsonSerializerOptions { WriteIndented = true };
var formatted = JsonSerializer.Serialize(user, options);

포맷팅 vs 압축

포맷팅 (Prettify)

장점:

  • 사람이 읽기 쉬움
  • 디버깅 용이
  • 구조 파악 쉬움

단점:

  • 파일 크기 증가
  • 네트워크 전송 시 비효율

사용 시기:

  • 개발/디버깅
  • 설정 파일
  • 문서화

압축 (Minify)

장점:

  • 파일 크기 감소 (약 30-50%)
  • 네트워크 전송 효율
  • 저장 공간 절약

단점:

  • 사람이 읽기 어려움
  • 디버깅 어려움

사용 시기:

  • 프로덕션 환경
  • API 응답
  • 대용량 데이터

실용적인 팁

1. 큰 JSON 파일 처리

// 스트리밍 파싱 사용
const stream = fs.createReadStream('large.json');
const parser = JSONStream.parse('*');
stream.pipe(parser);

2. 순환 참조 처리

const obj = {};
obj.self = obj; // 순환 참조

// 에러 발생
// JSON.stringify(obj); // TypeError

// 커스텀 replacer로 해결
const json = JSON.stringify(obj, (key, value) => {
if (key === 'self') return undefined;
return value;
});

3. Date 객체 처리

const data = {
name: "John",
created: new Date()
};

// Date → ISO 8601 문자열
const json = JSON.stringify(data);
// {"name":"John","created":"2022-01-01T00:00:00.000Z"}

4. 특정 필드만 직렬화

const user = {
name: "John",
password: "secret",
age: 30
};

// password 제외
const json = JSON.stringify(user, ['name', 'age']);
// {"name":"John","age":30}

5. 압축 전후 비교

const data = { /* 복잡한 객체 */ };

const formatted = JSON.stringify(data, null, 2);
console.log(formatted.length); // 1500

const minified = JSON.stringify(data);
console.log(minified.length); // 850

// 약 43% 감소!

JSON vs 다른 형식

JSON vs XML

특징JSONXML
가독성더 간결더 장황
파싱 속도빠름느림
데이터 타입네이티브 지원문자열만
속성없음있음
주석없음있음

JSON vs YAML

특징JSONYAML
가독성중간매우 좋음
문법엄격유연
주석없음있음
복잡한 구조가능더 쉬움
파싱 속도빠름느림

자주 묻는 질문

Q: JSON에 주석을 추가할 수 있나요?

표준 JSON은 주석을 지원하지 않습니다. 대안:

  • JSONC: VS Code 등에서 사용하는 주석 지원 JSON
  • JSON5: JavaScript 스타일 주석 지원

Q: JSON의 최대 크기는?

이론적 제한은 없지만 실용적으로:

  • 브라우저: 약 10-100 MB (브라우저마다 다름)
  • Node.js: 약 512 MB (V8 엔진 기본값)
  • 메모리 제한: 시스템 메모리에 따라 다름

Q: JSON에서 날짜를 어떻게 표현하나요?

표준 방법은 ISO 8601 문자열:

{"date": "2022-01-01T00:00:00.000Z"}

Q: JSON에서 undefined와 null의 차이는?

  • null: JSON에서 유효한 값
  • undefined: JSON에서 지원하지 않음 (생략되거나 null로 변환)

Q: 포맷팅하면 성능이 느려지나요?

약간 느려지지만 무시할 수 있는 수준입니다. 개발 중에는 포맷팅, 프로덕션에서는 압축 사용 권장.

Q: JSON 파일에 BOM이 있으면 어떻게 하나요?

BOM (Byte Order Mark)은 제거해야 합니다:

const json = text.replace(/^\uFEFF/, '');

관련 도구

성능

  • 파싱 속도: 밀리초 미만 (일반 크기)
  • 포맷팅 속도: 즉시
  • 압축 속도: 즉시
  • 메모리 사용: 최소

브라우저 호환성

JSON.parse()와 JSON.stringify()는 모든 현대 브라우저에서 지원됩니다:

  • Chrome (모든 버전) ✓
  • Firefox (모든 버전) ✓
  • Safari (모든 버전) ✓
  • Edge (모든 버전) ✓
  • IE 8+ ✓

개인정보 보호

이 도구는 완전히 클라이언트 측에서 작동합니다. 입력한 JSON은 서버로 전송되지 않으며, 브라우저에서만 처리됩니다.