JSON이란?
JSON(JavaScript Object Notation)은 데이터를 저장하고 전송하는 텍스트 형식입니다. 사람이 읽기 쉽고, 프로그램이 처리하기도 쉬워서 API에서 가장 많이 사용됩니다.
쉽게 이해하기
비유로 이해하기
JSON은 택배 송장과 같습니다.
송장에 보내는 사람, 받는 사람, 주소, 물품명이 정해진 양식으로 적혀있듯이,
JSON에도 데이터가 정해진 양식으로 들어있습니다.
JSON 기본 문법
객체 (Object)
중괄호 {}로 감싸고, "키": "값" 형태로 데이터를 담습니다.
{
"name": "홍길동",
"age": 30,
"email": "[email protected]"
} 배열 (Array)
대괄호 []로 감싸고, 여러 값을 나열합니다.
{
"fruits": ["사과", "바나나", "오렌지"]
} 중첩 (Nested)
객체 안에 객체, 배열 안에 객체 등 복잡한 구조도 가능합니다.
{
"order": {
"id": "ORD-001",
"items": [
{ "name": "티셔츠", "price": 29000 },
{ "name": "청바지", "price": 59000 }
]
}
} JSON 데이터 타입
| 타입 | 설명 | 예시 |
|---|---|---|
| 문자열 (String) | 텍스트, 큰따옴표로 감싸기 | "배송완료" |
| 숫자 (Number) | 정수, 소수 | 100, 3.14 |
| 불린 (Boolean) | 참/거짓 | true, false |
| 배열 (Array) | 순서가 있는 목록 | [1, 2, 3] |
| 객체 (Object) | 키-값 쌍 | {"key": "value"} |
| null | 값 없음 | null |
실제 예시: 택배 조회 응답
택배 API는 JSON 형식으로 배송 정보를 반환합니다. 아래는 응답 구조의 예시입니다.
{
"isSuccess": true,
"data": {
"results": [
{
"success": true,
"data": {
"courierCode": "cj",
"courierName": "CJ대한통운",
"trackingNumber": "1234567890",
"deliveryStatus": "DELIVERED",
"deliveryStatusText": "배송완료",
"isDelivered": true,
"progresses": [
{ "dateTime": "2024-01-15T14:30:00+09:00", "status": "배달완료", "statusCode": "DELIVERED", "location": "서울 강남구", "description": "배송완료" },
{ "dateTime": "2024-01-15T09:00:00+09:00", "status": "배송출발", "statusCode": "OUT_FOR_DELIVERY", "location": "서울 강남 배송터미널", "description": "배송출발" }
],
"dateLastProgress": "2024-01-15T14:30:00+09:00",
"queriedAt": "2024-01-15T15:00:00+09:00"
}
}
],
"summary": { "total": 1, "successful": 1, "failed": 0, "billable": 1 }
}
} 자세한 응답 형식은 API 문서를 참고하세요.
JSON 사용 시 주의사항
흔한 실수
- 키 이름은 반드시 큰따옴표 (작은따옴표 X)
- 마지막 항목 뒤에 쉼표 없음
- 문자열 안에서 줄바꿈 시
\n사용
// 잘못된 JSON
{
'name': "홍길동", // 작은따옴표 X
"age": 30, // 마지막에 쉼표 X
}
// 올바른 JSON
{
"name": "홍길동",
"age": 30
} JSON 다루기
JavaScript
// JSON 문자열 → 객체
const data = JSON.parse('{"name": "홍길동"}');
console.log(data.name); // 홍길동
// 객체 → JSON 문자열
const json = JSON.stringify({ name: "홍길동" });
console.log(json); // {"name":"홍길동"} Python
import json
# JSON 문자열 → 딕셔너리
data = json.loads('{"name": "홍길동"}')
print(data["name"]) # 홍길동
# 딕셔너리 → JSON 문자열
json_str = json.dumps({"name": "홍길동"})
print(json_str) # {"name": "홍길동"}