Tutorial

JSON이란 무엇인가?

JSON의 개념부터 문법 규칙, 데이터 타입, JavaScript와 Python에서의 실전 조작법까지 상세히 알아봅니다.

2026-04-015 min read

JSON이란 무엇인가요?

JSON(JavaScript Object Notation)은 경량 데이터 저장 및 전송 형식입니다. JSON의 핵심 설계 이념은 데이터가 인간이 읽기 쉽고 기계가 파싱하기 쉽게 하는 것으로, 이러한 이중적 특성은 JSON을 현대 Web 개발에서 가장 중요한 데이터 교환 형식 중 하나로 만들었습니다.

JSON은 원래 JavaScript 언어에서 유래했지만, 현재는 프로그래밍 언어와 완전히 독립된 데이터 형식 표준으로 발전했습니다. Python, Java, PHP, Ruby 등 거의 모든 현대 프로그래밍 언어가 JSON의 읽기 및 생성을 기본적으로 지원합니다. 이러한 크로스 플랫폼 호환성은 JSON을 서버와 클라이언트 간, 서로 다른 시스템 간 데이터 전송의首选 형식으로 만듭니다.

JSON은 일반 텍스트 형식을 사용하므로 특정 소프트웨어나 플랫폼에 의존하지 않고 텍스트 처리가 가능한 모든 환경에서 전송 및 저장할 수 있습니다.

JSON의 "경량" 특성은 두 가지 측면에서 나타납니다. 첫째, 구문 구조가 매우 간결하여 중복된 마크업이나 형식 요구 사항이 전혀 없습니다. 둘째, JSON 파일은 일반적으로 동일한 데이터의 XML 파일보다 30-50% 더 작아, 대량의 데이터를 자주 전송해야 하는 Web 애플리케이션에서 네트워크 오버헤드와 로딩 시간을 크게 줄일 수 있습니다.

JSON의 문법 규칙

JSON의 문법 설계는 엄격한 규칙을 따르며, 이러한 규칙은 데이터 형식의 일관성과 파싱 가능성을 보장합니다. 이러한 기본 규칙을 이해하는 것이 JSON을 올바르게 사용하는 기초입니다.

기본 문법 구조

  • 키-값 쌍 형식: JSON 데이터는 이름/값 쌍으로 구성되며, 각 쌍은 콜론으로 구분됩니다 (예: "name": "John")
  • 큰따옴표 강제: 모든 키 이름은 큰따옴표로 묶어야 합니다. 이것이 JSON과 JavaScript 객체의 중요한 차이점입니다
  • 데이터 구분자: 여러 키-값 쌍은 쉼표로 구분하지만, 마지막 쌍 뒤에는 쉼표를 붙일 수 없습니다
  • 객체 컨테이너: 중괄호 {}는 객체를 감싸며, 순서가 없는 키-값 쌍의 집합을 나타냅니다
  • 배열 컨테이너: 대괄호 []는 배열을 감싸며, 순서가 있는 값의 목록을 나타냅니다
  • 중첩 구조: 객체와 배열은 서로 중첩되어 복잡한 데이터 계층 구조를 형성할 수 있습니다

주의해야 할 점: JSON의 일반적인 오류

실제 개발에서 개발자는 JSON 형식과 관련된 일반적인 오류를 자주 접하게 됩니다. 다음은 특히 주의해야 할 "함정"들입니다:

1. JSON은 주석을 지원하지 않습니다

JSON 사양에서는 어떤 형태의 주석도 명시적으로 지원하지 않습니다. JSON 파일에 // 또는 /* */ 형식의 주석을 추가하면 파서가 직접 오류를 보고합니다. JSON에 설명 정보를 포함해야 하는 경우 "_comment": "설명 텍스트입니다"와 같은 특수 키를 데이터에 추가하는 방법을 고려할 수 있지만, 이 방법은 프로덕션 환경에서는 권장되지 않습니다.

2. 큰따옴표를 사용해야 하며, 작은따옴표는 사용할 수 없습니다

이는 매우 흔한 오류입니다. JavaScript에서는 작은따옴표나 큰따옴표를 사용하여 문자열을 정의할 수 있지만, JSON에서는 모든 문자열에 큰따옴표를 사용해야 합니다. 예를 들어, {'name': 'John'}은 유효하지 않은 JSON이며 {"name": "John"}으로 작성해야 합니다.

3. 마지막 요소 뒤에는 쉼표를 붙일 수 없습니다

JavaScript에서는 객체나 배열의 마지막 요소 뒤에 선택적 쉼표를 붙일 수 있지만, JSON에서는 이것이 엄격히 금지됩니다. {"name": "John",}은 파싱 오류를 발생시키며, 올바른 형식은 {"name": "John"}입니다.

4. 키 이름은 반드시 문자열이어야 합니다

JSON에서 모든 키는 문자열 유형이어야 하며 큰따옴표로 묶어야 합니다. {age: 25}와 같은 작성법은 JavaScript에서는 유효하지만 JSON에서는 유효하지 않으며 {"age": 25}로 작성해야 합니다.

핵심 데이터 타입

JSON은 6가지 핵심 데이터 타입을 지원하며, 각 타입에는 고유한 문법 규칙과 용도가 있습니다. 이러한 데이터 타입을 이해하는 것이 JSON 데이터 구조를 올바르게 구축하는 열쇠입니다.

String (문자열)

문자열은 JSON에서 가장 많이 사용되는 데이터 타입으로, 텍스트 정보를 표현합니다. 문자열은 큰따옴표로 묶어야 하며, 모든 유니코드 문자를 포함할 수 있습니다. JSON 문자열은 \n(줄바꿈), \t(탭), \"(큰따옴표) 등의 일반적인 이스케이프 문자를 지원합니다.

{
  "name": "장삼",
  "email": "zhangsan@example.com",
  "address": "베이징시 차오양구\n젠궈루 88번지"
}

Number (숫자)

JSON의 숫자 타입에는 정수와 부동소수점 숫자가 포함되며, 8진수나 16진수 형식은 지원하지 않습니다. 숫자는 양수, 음수, 소수 부분 또는 과학적 표기법을 포함할 수 있습니다.

{
  "age": 28,
  "price": 99.99,
  "temperature": -5,
  "largeNumber": 3.14e10
}

Object (객체)

객체는 순서가 없는 키-값 쌍의 집합으로, 중괄호로 묶습니다. 각 키-값 쌍의 키는 문자열이어야 하며, 값은 유효한 JSON 데이터 타입일 수 있습니다. 객체는 중첩되어 복잡한 데이터 구조를 형성할 수 있습니다.

{
  "user": {
    "profile": {
      "name": "이사",
      "age": 32
    },
    "preferences": {
      "theme": "dark",
      "language": "ko-KR"
    }
  }
}

Array (배열)

배열은 순서가 있는 값의 목록으로, 대괄호로 묶습니다. 배열의 값은 혼합 유형을 포함한 모든 JSON 데이터 타입이 될 수 있습니다. 배열은 사용자 목록, 태그 등의 컬렉션 데이터를 표현하는 데 특히 적합합니다.

{
  "users": ["Alice", "Bob", "Charlie"],
  "scores": [95, 87, 92, 88],
  "mixed": [1, "two", true, null]
}

Boolean (불리언)

불리언 값은 true 또는 false 두 가지 값만 가질 수 있습니다. 이 값들은 소문자이며 따옴표로 묶을 필요가 없습니다.

{
  "isActive": true,
  "hasPermission": false,
  "isPremium": true
}

Null (널)

null은 빈 값이나 존재하지 않는 값을 나타냅니다. 이것도 따옴표로 묶을 필요가 없으며 소문자여야 합니다.

{
  "middleName": null,
  "avatar": null,
  "lastLoginTime": null
}

JSON vs XML

JSON과 XML은 모두 데이터 저장 및 전송을 위한 형식이지만, 설계 이념, 문법 구조, 사용 시나리오에서 현저한 차이가 있습니다. 다음 비교표는 두 형식의 차이를 빠르게 이해하는 데 도움이 됩니다:

특성JSONXML
정식 명칭JavaScript Object NotationeXtensible Markup Language
파일 크기더 작음 (일반적으로 XML보다 30-50% 작음)더 큼 (닫는 태그 필요)
가독성간결하고 명확하여 읽기 쉬움구조는 명확하지만 다소冗長
파싱 속도더 빠름 (표준 함수로 파싱 가능)느림 (XML 파서 필요)
데이터 타입여러 네이티브 데이터 타입 지원텍스트만 지원, 유형 직접 정의 필요
배열 지원네이티브 배열 지원배열 개념 지원 안 함
주석주석 지원 안 함주석 지원
네임스페이스지원 안 함네임스페이스 지원
적용 시나리오Web API, 모바일 앱, 설정 파일엔터프라이즈 문서, 복잡한 데이터 구조

선택 조언: 현대 Web 개발과 모바일 애플리케이션에는 경량이고 파싱이 빠르며 JavaScript와의 네이티브 호환성이 뛰어난 JSON이 일반적으로 더 나은 선택입니다. XML은 복잡한 문서 구조, 네임스페이스 지원, 엄격한 검증이 필요한 엔터프라이즈 애플리케이션 시나리오에 더 적합합니다.

실전: JS/Python에서 JSON을 조작하는 방법

실제 개발에서 가장 일반적인 JSON 조작은 JSON 문자열을 프로그램 내 객체로 변환하는 것과 객체를 JSON 문자열로 변환하는 것입니다. 다음은 JavaScript와 Python에서의 구체적인 구현 방법입니다.

JavaScript에서의 JSON 조작

JavaScript는 JSON 데이터를 처리하기 위한 두 가지 코어 메서드 JSON.parse()JSON.stringify()를 제공합니다.

1. JSON.parse() - JSON 문자열을 JavaScript 객체로 변환

// JSON 문자열
const jsonString = '{"name": "장삼", "age": 28, "city": "베이징"}';

// JavaScript 객체로 파싱
const obj = JSON.parse(jsonString);

// 파싱된 객체 사용
console.log(obj.name);  // 출력: 장삼
console.log(obj.age);   // 출력: 28

// 중첩 구조 처리
const complexJson = `{
  "user": {
    "profile": {"name": "이사"},
    "skills": ["JavaScript", "Python"]
  }
}`;
const data = JSON.parse(complexJson);
console.log(data.user.profile.name);      // 출력: 이사
console.log(data.user.skills[0]);          // 출력: JavaScript

2. JSON.stringify() - JavaScript 객체를 JSON 문자열로 변환

// JavaScript 객체
const user = {
  name: "왕오",
  age: 32,
  email: "wangwu@example.com",
  isActive: true
};

// JSON 문자열로 변환
const jsonString = JSON.stringify(user);
console.log(jsonString);
// 출력: {"name":"왕오","age":32,"email":"wangwu@example.com","isActive":true}

// 포맷 출력 (들여쓰기 포함)
const prettyJson = JSON.stringify(user, null, 2);
console.log(prettyJson);
/* 출력:
{
  "name": "왕오",
  "age": 32,
  "email": "wangwu@example.com",
  "isActive": true
}
*/

// 특정 속성만 포함
const filtered = JSON.stringify(user, ["name", "email"], 2);
console.log(filtered);
/* 출력:
{
  "name": "왕오",
  "email": "wangwu@example.com"
}
*/

Python에서의 JSON 조작

Python에는 json 모듈이 내장되어 있으며, JavaScript와 유사한 기능을 제공합니다.

1. json.loads() - JSON 문자열을 Python 객체로 변환

import json

# JSON 문자열
json_string = '{"name": "장삼", "age": 28, "city": "베이징"}'

# Python 딕셔너리로 파싱
data = json.loads(json_string)

# 파싱된 데이터 사용
print(data['name'])  # 출력: 장삼
print(data['age'])   # 출력: 28

# 중첩 구조 처리
complex_json = '''
{
  "user": {
    "profile": {"name": "이사"},
    "skills": ["JavaScript", "Python"]
  }
}
'''
data = json.loads(complex_json)
print(data['user']['profile']['name'])      # 출력: 이사
print(data['user']['skills'][0])            # 출력: JavaScript

2. json.dumps() - Python 객체를 JSON 문자열로 변환

import json

# Python 딕셔너리
user = {
    "name": "왕오",
    "age": 32,
    "email": "wangwu@example.com",
    "is_active": True,
    "skills": ["Python", "JavaScript", "Go"]
}

# JSON 문자열로 변환
json_string = json.dumps(user)
print(json_string)
# 출력: {"name": "왕오", "age": 32, "email": "wangwu@example.com", ...}

# 포맷 출력 (들여쓰기 포함)
pretty_json = json.dumps(user, indent=2, ensure_ascii=False)
print(pretty_json)
""" 출력:
{
  "name": "왕오",
  "age": 32,
  "email": "wangwu@example.com",
  "is_active": true,
  "skills": [
    "Python",
    "JavaScript",
    "Go"
  ]
}
"""

# 키 정렬
sorted_json = json.dumps(user, sort_keys=True, indent=2)
print(sorted_json)

현대 개발에서 JSON의 중요성

Oracle과 DigitalOcean의 분석에 따르면 JSON은 현대 소프트웨어 개발에서 대체 불가능한 역할을 하고 있습니다:

API 통신: 거의 모든 현대 RESTful API가 JSON을 데이터 교환 형식으로 사용합니다. 가볍고 파싱하기 쉬우며 JavaScript와 네이티브 호환되기 때문입니다.

데이터베이스 저장: NoSQL 데이터베이스(MongoDB, Couchbase 등)는 JSON 형식 저장을 네이티브 지원하며, 주류 관계형 데이터베이스(Oracle, PostgreSQL, MySQL 등)도 JSON 데이터 타입 지원을 시작하여 개발자가 관계형 데이터베이스에서 유연하게 JSON 데이터를 저장하고 쿼리할 수 있게 되었습니다.

설정 파일: package.json(Node.js), tsconfig.json(TypeScript), .vscode/settings.json(VS Code) 등 점점 더 많은 애플리케이션과 개발 도구가 JSON을 설정 파일 형식으로 채택하고 있습니다. 이는 JSON의 간결성과 가독성이 기존의 INI 또는 XML 형식보다 우수하기 때문입니다.


JSON 도구 계속 사용하기

JSON Work 팀

개발자에게 최고의 JSON 처리 도구를 제공하는 데 전념

관련 게시물

더 많은 게시물이 곧 출시됩니다...

블로그로 돌아가기

관련 도구

자주 묻는 질문

업데이트 확인 방법, 다루는 주제, 제안 방법입니다.

새 글을 빠르게 보려면?

이 블로그 목록을 북마크하고 홈·도구 허브의 가이드 영역도 확인하세요. 글 읽기에 가입이나 메일 구독이 필요 없습니다.

어떤 주제를 다루나요?

JSON 검증, 포맷, 변환, 디버깅 흐름과 JSON Work 업데이트이며, 사이트의 무료 브라우저 도구와 맞물립니다.

튜토리얼 주제를 제안할 수 있나요?

가능합니다. About 페이지나 GitHub로 연락 주세요. 실제 연동·디버깅에 도움이 되는 주제를 우선합니다.

도움이 필요하신가요?