JSON(JavaScript Object Notation)은 구조화된 데이터를 저장하고 교환하기 위한 경량 텍스트 형식입니다. 대다수 웹 API, 대부분의 애플리케이션 설정 파일, 무수한 데이터베이스를 구동합니다. REST API 응답을 본 적이 있거나 package.json 파일을 연 적이 있다면 이미 JSON 을 읽은 것입니다. 본 가이드는 JSON 이 정확히 무엇인지, 형식이 어떻게 생겼는지, 그리고 왜 데이터 교환의 공용어가 되었는지 설명합니다.
JSON 이란?
JSON 은 JavaScript Object Notation 의 약자입니다. 2000 년대 초 Douglas Crockford 가 웹 서버와 브라우저 간 데이터 교환을 위한 XML 의 더 단순한 대안으로 만들었습니다. 이름에 "JavaScript" 가 있지만 JSON 은 언어 독립적입니다 —— 모든 주요 프로그래밍 언어에 JSON 파서가 내장되어 있습니다.
이 형식은 두 국제 표준이 정의합니다: IETF 의 RFC 8259(역사와 주요 변경)과 Ecma International 의 ECMA-404. 둘 다 같은 말을 합니다: JSON 은 여섯 가 지 데이터 타입 중 하나를 나타내는 Unicode 문자 시퀀스이며 UTF-8 로 인코딩됩니다.
JSON 의 여섯 가지 데이터 타입
JSON 은 정확히 여섯 개의 값 타입을 지원합니다. 이들의 이해가 JSON 형식 이해의 기초입니다.
1. 객체(Object)
중괄호로 묶인 순서 없는 키-값 쌍의 모음. 키는 문자열(큰따옴표)이어야 합니다. 값은 임의의 JSON 타입.
{
"name": "Alice",
"age": 30,
"active": true
}2. 배열(Array)
대괄호로 묶인 값의 순서 있는 리스트.
["apple", "banana", "cherry"]3. 문자열(String)
큰따옴표 로 감싼 Unicode 문자 시퀀스. 작은따옴표는 유효한 JSON 이 아닙니다.
"Hello, world!"4. 숫자(Number)
정수 또는 부동소수점. JSON 에 정수와 부동의 별도 타입은 없습니다 —— 오직 number 만. 따옴표 없음, 16 진 리터럴 없음, NaN 이나 Infinity 도 없음.
42
3.14
-7
1.5e105. 불리언(Boolean)
소문자 true 또는 false 만. JSON 은 True, False, yes, no, 1, 0 을 불리언 값으로 받지 않습니다.
true
false6. Null
값의 부재를 나타냄. 소문자 null 로 작성.
nullJSON 파일이란?(과 .json 파일 형식)
JSON 파일(가끔 jason file 로 잘못 쓰임)은 단일 JSON 값 —— 대개 객체나 배열 —— 을 담은 평문 파일입니다. .json 파일 형식은 RFC 8259 를 따르는 UTF-8 텍스트이며 관례적으로 .json 확장자를 씁니다. 평문이므로 특별한 뷰어가 필요 없습니다.
JSON(또는 .json) 파일 여는 법:아무 텍스트 에디터로 충분합니다 —— VS Code, Notepad, TextEdit, Sublime, nano. 같은 질문이 여러 방식으로 묻힙니다 —— how to open json files, how to open a .json file, how do i open a json file, how do you open a json file, 또는 단순히 open json file —— 답은 같음: 텍스트로 여세요. 더 읽기 쉬운 보기를 원하면 내용을 JSON Viewer 에 붙여 넣어 접을 수 있는 트리로 보거나 JSON Fix 도구로 포매팅하세요. macOS 와 Windows 에서 .json 파일을 더블클릭하면 보통 기본 텍스트 에디터로 열립니다; 브라우저에서 열리려 한다면 우클릭하고 "연결 프로그램" 으로 에디터를 고르세요. 압축 해제 단계는 필요 없습니다 —— .json 은 아카이브가 아닙니다.
JSON 파일 만드는 법("how to make a json file"):아무 텍스트 에디터를 열고 단일 유효 JSON 값(객체, 배열, 문자열, 숫자, 불리언, null)을 작성한 뒤 .json 확장자로 저장하세요. 이게 전부입니다 —— 헤더, 스키마 선언, UTF-8 외 필수 인코딩 마커 없음. 프로그램은 확장자를 인식하는 순간 JSON 파일 형식으로 읽습니다. 작은 json file example: { "name": "Ada", "active": true }.
JSON 형식이란?(관련 검색 why files are stored in json format): JSON 형식은 작고 언어 독립적인 텍스트 형식으로 키, 값, 배열, 객체를 고정된 리터럴 타입으로 나타냅니다. 같은 문서를 Python, Go, Java, JavaScript, Rust, 데이터베이스가 번역 없이 읽을 수 있어 이 형식으로 저장됩니다 —— JSON 은 시스템 간에 구조화된 데이터를 옮기는 최대 공약수입니다.
// users.json
[
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "editor" }
]이미 보았을 흔한 JSON 파일:
package.json—— Node.js 프로젝트 메타데이터와 의존성tsconfig.json—— TypeScript 컴파일러 설정settings.json—— VS Code 사용자 설정manifest.json—— 브라우저 확장이나 PWA manifest
JSON 데이터 형식이란?
JSON 데이터 형식은 비슷해 보이는 JavaScript 코드와 구별되는 몇 가지 엄격한 규칙을 가집니다:
- 모든 키는 큰따옴표 문자열이어야 함.
{ name: "Alice" }은 JavaScript 객체 리터럴이며 JSON 이 아닙니다. - 문자열은 큰따옴표를 써야 함.
{ "name": 'Alice' }은 무효한 JSON. - 후행 콤마 없음.
{ "a": 1, }은 무효한 JSON. - 주석 없음.
// comment와/* block comment */는 JSON 에서 허용되지 않음. undefined없음. JavaScript 의undefined은 JSON 에 대응이 없음. 대신null을 사용.
JSON vs XML: 왜 JSON 이 이겼는가
JSON 은 XML 과 같은가? 아니요 —— 둘 다 구조화된 데이터를 운반하지만 모양, 크기, 기계가 다릅니다. JSON 이 인수받기 전 XML 이 표준 데이터 교환 형식이었습니다. 같은 데이터를 두 형식으로:
<!-- XML -->
<user>
<name>Alice</name>
<age>30</age>
</user>
// JSON
{ "name": "Alice", "age": 30 }JSON 은 더 콤팩트하고 사람이 읽기 쉽고 JavaScript 에서 서드파티 없이 네이티브로 파싱 가능합니다. 대부분의 사용 사례(API 응답, 설정, 메시징)에서 JSON 은 XML 보다 훨씬 적은 대역폭과 코드를 요구합니다.
JSON 이 사용되는 곳
- REST API:
Content-Type: application/json헤더가 사실상 모든 현대 웹 API 응답을 표시. - 설정 파일:
package.json,tsconfig.json,.eslintrc.json, AWS CloudFormation 템플릿. - 데이터베이스: PostgreSQL, MySQL, MongoDB, DynamoDB 가 JSON 컬럼/문서의 저장과 쿼리를 네이티브로 지원.
- 로그 파일: 구조화 로깅(JSON Lines 사용)이 로그 데이터를 Elasticsearch 같은 집계 도구로 기계 파싱 가능하게 함.
- 프로세스 간 통신: 마이크로서비스, 메시지 큐(Kafka, RabbitMQ), 서버리스 함수가 JSON 을 기본 페이로드 형식으로 사용.
데이터베이스의 JSON
대부분의 현대 DB 는 JSON 을 직접 저장·쿼리할 수 있어 구조를 유지하려 별도 문서 저장소에 살 필요 없습니다:
- PostgreSQL —— 두 타입:
json은 원문 저장;jsonb는 이진·인덱스 가능한 표현 저장.->/->>로 필드,@>로 포함을 쿼리;jsonb컬럼에 GIN 인덱스로 핫 패스 인덱싱. - MongoDB —— 문서가 그 자체로 JSON 같음(디스크상 BSON). 필드 단위 인덱스와 완전한 집계 파이프라인이 문서 모양에 직접 작동.
- SQLite —— JSON1 확장(현대 SQLite 에 내장)이
json_extract,json_each, JSON 필드에서 인덱스된 생성 컬럼을 제공. - MySQL —— 네이티브
JSON컬럼 타입과 경로 표현식, JSON 값을 행으로 조인하는JSON_TABLE.
어디에나 적용되는 두 가지 실용 알림: 큰 정수는 클라이언트 드라이버를 거치며 정밀도를 잃을 수 있고, JSON 사양은 키의 정규 순서를 정의하지 않습니다 —— 결정적 비교나 해싱이 필요하면 RFC 8785(JCS) 를 쓰세요.
흔한 JSON 오류
경험 많은 개발자도 무효한 JSON 을 씁니다. 가장 흔한 실수:
- 마지막 요소 뒤의 후행 콤마
- 큰따옴표 대신 작은따옴표
- 따옴표 없는 키
- JSON 안의 JavaScript 주석
- Python 스타일 값, 예:
True,False,None
JSON 이 올바르게 파싱되지 않으면 온라인에서 즉시 수리 —— 도구가 이런 흔한 문제를 자동 수리하고 무엇이 바뀌었는지 정확히 보여줍니다.
코드에서 JSON 파싱
모든 주요 언어가 JSON 지원을 내장합니다:
// JavaScript
const obj = JSON.parse('{"name":"Alice","age":30}');
console.log(obj.name); // "Alice"
# Python
import json
obj = json.loads('{"name":"Alice","age":30}')
print(obj['name']) # Alice
# Go
import "encoding/json"
var obj map[string]interface{}
json.Unmarshal([]byte(`{"name":"Alice","age":30}`), &obj)Python 에서 JSON 파일을 어떻게 읽나(또는 read json file in python): 파일 경로에는 json.load(open('data.json')), 이미 문자열이면 json.loads(text). 둘 다 구문 오류에 json.JSONDecodeError 를 던집니다.
현대 시스템에서 XML 대신 JSON 을 선택하는 이유는 보통 바이트와 파서 지원에 귀결됩니다 —— 모든 언어가 JSON 을 네이티브 지원하고 XML 은 보통 서드파티가 필요합니다.
마주칠 흔한 JSON 변종
엄격 JSON 이 기준이지만 밀접하게 관련된 몇몇 방언이 자주 나타납니다:
- JSONC(주석 있는 JSON) ——
//와/* */주석, 후행 콤마 허용.tsconfig.json과 VS Code 의settings.json이 사용. 표준 파서는 거부; JSONC 인식 파서를 쓰거나 먼저 주석을 제거하세요. - NDJSON / JSON Lines —— 한 줄에 하나의 JSON 값,
\n으로 구분. 스트리밍 로그, ML 데이터셋, 벌크 API 에 사용. 한 번에 전체가 아니라 줄마다JSON.parse로 파싱하세요. - JSON Pointer(RFC 6901) —— 문서 안의 값을 가리키는 경로 구문, 예:
/users/0/name. JSON Patch 와 JSON Schema 의$ref가 쓰는 경로 형식.
자주 묻는 질문
JSON 은 무엇의 약자인가요?
JSON 은 JavaScript Object Notation 의 약자. 이름에도 불구하고 언어 독립적입니다 —— 모든 주요 언어가 읽고 쓸 수 있음 —— RFC 8259 와 ECMA-404 가 정의.
JSON 의 데이터 타입은?
여섯: 문자열, 숫자, 불리언, null, 객체, 배열. 별도의 정수 타입 없음, 날짜 타입 없음, undefined 없음. 맥락 안 각 예제는 JSON 포맷 예제.
JSON 과 JavaScript 객체가 같은가요?
아니요. JSON 은 엄격한 규칙을 가진 텍스트 형식(큰따옴표 키, 후행 콤마 없음, 주석 없음); JavaScript 객체 리터럴은 훨씬 관대한 코드. JSON vs JavaScript 객체.
JSON 이 유효한지 어떻게 확인하나요?
JSON.parse() 로 파싱(무효 입력에 던짐), 또는 How to Validate JSON 을 따라 검사기 를 통과시키세요. 구조와 타입을 강제하려면 JSON Schema 로 기술하세요.
JSON 작업 도구
- JSON Fix —— 무효한 JSON 을 즉시 검증, 수리, 포매팅
- JSON Schema 란? —— JSON 데이터의 구조 기술과 검증
- How to Format JSON —— JavaScript, Python, 명령행, 브라우저에서 pretty-print
- JSON 포맷 예제 —— 모든 데이터 타입과 실세계 패턴의 복붙 가능 예제
- JSON Diff —— 두 JSON 문서를 비교해 무엇이 변했는지 확인
- YAML to JSON —— YAML 설정을 JSON 형식으로 변환