JSON은 데이터를 주고받기 위한 경량 데이터 포맷(Lightweight Data Format)입니다. 텍스트 기반의 구조를 가지고 있어 사람이 읽기 쉽고, 시스템이 파싱(Parsing)하기에도 매우 최적화되어 있습니다.
JSON이란?
JSON은 데이터를 "키(Key)": "값(Value)" 형태로 표현하는 포맷입니다. 구조가 단순하고 가독성이 좋아, 웹/모바일/서버 간 통신에서 구조화된 데이터(Structured Data)를 전달하는 데 적합합니다.
JSON의 특징
Readable
단순 텍스트 기반 포맷으로, 사람이 직관적으로 읽고 이해할 수 있습니다. 이는 개발 과정에서 디버깅을 용이하게 하며, 데이터 구조를 한눈에 파악할 수 있게 해줍니다.
Lightweight
데이터를 저장하고 전송하는 데 매우 효율적입니다. XML과 같은 다른 포맷에 비해 오버헤드가 적어 네트워크 부하(Load)를 최소화하며 전송 속도가 빠릅니다.
Language Independence
특정 프로그래밍 언어에 종속되지 않습니다. 거의 모든 현대 언어(Python, Java, Go 등)에서 JSON을 기본적으로 지원하므로, 서로 다른 환경의 시스템 간 데이터를 주고받는 표준으로 활용하기에 최적입니다.
JSON의 구조
(1) 기본 구성
JSON은 괄호 형태로 자료 구조를 구분합니다.
᛫ { } : Object(객체, 키-값 묶음)
᛫ [ ] : Array(배열, 순서가 있는 값 목록)
Object 예시
| { "name": "Alice" } |
Array 예시
| [ "white", "red", "yellow", "green", "blue" ] |
(2) 핵심 개념
JSON은 다음 요소로 데이터를 표현합니다.
᛫ Key-Value(키-값) 쌍
᛫ Object: 순서가 없는 키-값 집합
᛫ Array: 순서가 있는 값 목록(리스트)
(2.1) Key-Value(키-값) 쌍
키(Key)는 콜론(:)의 왼쪽에 위치하며 문자열(string)로 작성하고 큰따옴표(" ")로 감싸주어야 합니다.
값(Value)은 콜론(:)의 오른쪽에 위치하며, 문자열/숫자/불리언/객체/배열/null 등을 의미합니다.
예시
| { "name": "Alice", "age": 25, "city": "New York" } |
(2.2) Object
Object는 { }로 감싸며 여러 개의 키-값 쌍으로 구성됩니다. 각 항목은 쉼표(,)로 구분되며, JSON 표준에서 Object 내부 항목의 순서는 의미가 없습니다. 또한 Object/Array를 중첩하여 계층 구조(Nested Structure)를 표현할 수 있습니다.
예시
| { "name": "Bob", "age": 30, "address": { "street": "123 Main St", "city": "Los Angeles" } } |
Array를 포함한 예시
| { "name": "John", "age": 35, "languages": ["JavaScript", "Python", "Java"], "address": { "street": "123 Main St", "city": "Exampleville" } } |
Object 중첩 예시
| { "person": { "1": { "name": "Alice", "age": 28, "city": "New York" }, "2": { "name": "Bob", "age": 35, "city": "Los Angeles" } } } |
(2.3) Array
Array는 [ ]로 감싸며 여러 개의 값을 순서대로 나열합니다. 쉼표(,)로 항목을 구분하고, Object/Array를 중첩할 수 있습니다. 대부분의 구현에서 배열 요소는 0부터 시작하는 인덱스로 접근합니다.
예시
| { "person": { "name": "Alice", "age": 28, "hobbies": [ "reading", "hiking", "painting" ], "address": { "street": "123 Main St", "city": "New York" } }, "pets": [ { "type": "dog", "name": "Buddy" }, { "type": "cat", "name": "Whiskers" } ] } |
(3) JSON 값 타입(Value Types)
JSON에서 값(Value)으로 사용할 수 있는 타입은 다음과 같습니다.
᛫ Object
᛫ Array
᛫ String
᛫ Number
᛫ Boolean
᛫ Null (값의 명시적 부재)
아래에서는 실무에서 자주 다루는 String, Number, Boolean 타입을 예시로 설명합니다.
(3.1) String
String은 큰따옴표(" ")로 감싼 텍스트입니다. JSON 표준에서 작은따옴표(' ')는 유효하지 않으므로 사용하면 파싱 오류가 발생할 수 있습니다.
문자열 내부에서 다음과 같은 이스케이프(escape) 시퀀스를 사용할 수 있습니다.
\” Double Quotation
\\ Backslash
\/ Slash
\b Backspace
\f Form Feed
\n Enter(New Line)
\r Carriage Return
\t Tab
\u 4자리 16진수(Unicode 코드 포인트)로 유니코드 문자를 표현
예를 들어, 폴더 경로와 같이 백슬래시를 포함하는 문자열은 이스케이프 처리가 필요하므로, 이스케이프 문자인 백슬래시가 자주 사용됩니다.
| { "folderPath": "C:\\root\\documents\\projects" } |
(3.2) Number
Number는 따옴표로 감싸지 않는 숫자 입니다. 정수/실수 모두 표현 가능하며, 필요 시 지수 표기법(Scientific Notation)도 지원합니다. 일반적으로 숫자는 0으로 시작하지 않는 형태로 작성합니다. Number는 큰따옴표(" ")로 감싸면 문자열(String)로 해석되므로 주의해야 합니다.
예시
| { "year": 2023, "latitude": 40.7128, "longitude": -74.0060, "earth_distance_km": 1.496e8, "earth_distance2_km": 1.496e+8, "speed_of_light_mps": 3e+8, "speed_of_light2_mps": 3E+8, "atomic_mass_kg": 2.34e-27, "atomic_mass2_kg": 2.34E-27 } |
(3.3) Boolean
Boolean은 true 또는 false 값을 가지며, 따옴표로 감싸지 않습니다(감싸면 문자열이 됩니다).
예시
| { "isStudent": true, "isWorking": false, "isOnline": true, "hasLicense": false } |
(4) JSON 활용
JSON은 웹/모바일 클라이언트와 서버 간 데이터 교환에서 가장 보편적으로 사용됩니다. 특히 REST API의 요청/응답 바디에서 표준 포맷으로 활용되며, 웹 서비스 전반에서 구조화된 데이터를 전달·저장·처리하는 데 적합합니다.