JSON은 JavaScript Object Notation의 약자로, 데이터를 저장하거나 교환하기 위해 사용하는 가벼운 데이터 형식이다.
기본적으로 Key-Value Pair로 데이터를 표현하며, 사람과 컴퓨터 모두 읽고 쓰기 쉽도록 설계되었다.
이는 데이터를 중첩된 구조로 정리할 수 있다는 의미이다. 하나의 데이터 안에 또 다른 데이터(객체나 배열)를 포함시켜서 상하 관계 또는 포함 관계를 표현할 수 있다.
계층적 구조를 생각할 때 나무를 떠올리면 이해하기 쉽다.
(1) 단순한 데이터 (평면적인 구조)
{
"name": "홍길동",
"age": 25,
"city": "서울"
}
(2) 계층적 데이터 (중첩된 구조)
{
"name": "홍길동",
"age": 25,
"address": {
"city": "서울",
"district": "강남구",
"street": "테헤란로"
},
"hobbies": ["축구", "독서"]
}
address
안에 또 다른 객체가 있다. 이 객체는 city
, district
, street
정보를 가진다.hobbies
는 배열로 취미 리스트를 가진다.address
객체는 모든 주소 정보를 한곳에 모아둔 데이터이다.{
"storeName": "Tech Shop",
"products": [
{
"name": "Laptop",
"price": 1200,
"specs": {
"brand": "Lenovo",
"processor": "Intel i7",
"ram": "16GB"
}
},
{
"name": "Smartphone",
"price": 800,
"specs": {
"brand": "Samsung",
"processor": "Exynos",
"ram": "8GB"
}
}
]
}
product
는 배열로, 여러 상품 데이터를 포함한다.Laptop
, Smartphone
)은 객체로 표현되며, 각 상품마다 다른 속성 (이름, 가격, 스펙 등)을 가진다.specs
는 중첩된 객체로, 상품의 상세 사양을 지정한다.specs
에 추가로 weight
, battery
같은 속성을 더해도 구조가 깨지지 않음.) 프로그래밍 언어에서 이런 계층적 구조를 탐색하고 가공하는 작업을 쉽게 처리할 수 있다.
import json
# JSON 데이터
json_data = '''
{
"name": "홍길동",
"address": {
"city": "서울",
"district": "강남구"
},
"hobbies": ["축구", "독서"]
}
'''
# JSON 문자열을 Python 객체로 변환
data = json.loads(json_data)
# 계층적 데이터 접근
print(data["name"]) # 홍길동
print(data["address"]["city"]) # 서울
print(data["hobbies"][0]) # 축구
JSON 데이터는 객체와 배열 이 두가지 요소로 이루어진다.
{}
로 묶이며 키와 값으로 데이터를 저장한다.{
"key": "value"
}
[]
로 묶이며, 데이터의 순서 있는 리스트를 표현한다.[
"value1",
"value2",
"value3"
]
""
로 감싼 텍스트true
or false
JSON은 웹 애플리케이션에서 클라이언트와 서버 간 데이터 교환 시 사용
(ex. 브라우저가 서버로부터 사용자 정보를 JSON 형태로 받아온다.)
{
"userId": 12345,
"username": "john_doe",
"email": "john.doe@example.com"
}
모바일 앱에서 서버와 데이터를 주고받을 때 사용
(ex. 유튜브 앱에서 동영상 목록을 JSON 형태로 요청/응답)
[
{
"title": "JSON Tutorial",
"views": 1500,
"duration": "10:32"
},
{
"title": "Understanding APIs",
"views": 2400,
"duration": "12:45"
}
]
JSON은 간단한 설정 파일이나 로컬 데이터 저장소로 사용
(ex. 앱 설정 파일 [config.json])
{
"theme": "dark",
"language": "ko",
"notifications": true
}