← 전체 글

JSON이란? JSON 포맷, 문법, 파일 완전 가이드

JSON(JavaScript Object Notation)은 보편적인 데이터 교환 포맷. 여섯 가지 데이터 타입, JSON을 엄격하게 만드는 문법 규칙, .json 파일의 사용처, 각 언어에서 JSON을 파싱하는 법을 배운다.

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.5e10

5. 불리언(Boolean)

소문자 true 또는 false 만. JSON 은 True, False, yes, no, 1, 0 을 불리언 값으로 받지 않습니다.

true
false

6. Null

값의 부재를 나타냄. 소문자 null 로 작성.

null

JSON 파일이란?(과 .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 형식으로 변환