Jupyo's Daily Story
JSON 본문
728x90
반응형
JSON (JavaScript Object Notation)은 데이터를 저장하고 전송하는 데 사용되는 경량 데이터 교환 형식입니다. 사람이 읽기 쉬우며 기게가 파싱하고 생성하기 쉬운 텍스트 형식으로, 특히 웹에서 자주 사용됩니다.
JSON의 주요 특징
- 텍스트 기반: JSON은 사람이 읽고 쓸 수 있는 텍스트 형식으로 구성됩니다.
- 키-값 쌍: 데이터는 키-값 쌍으로 저장되며, 키는 항상 문자열이고, 값은 여러 가지 자료형을 가질 수 있습니다.
- 프로그래밍 언어 독립적: JSON은 특정 프로그래밍 언어에 종속되지 않으며, 대부분의 언어에서 파싱 및 생성할 수 있습니다.
- 경량: 다른 데이터 포맷보다 크기가 작고 간결하여, 네트워크를 통한 데이터 전송에 적합합니다.
JSON 문법
JSON 데이터는 객체(object)와 배열(array)의 형태로 구성됩니다.
객체 (Object)
- 중괄호 {} 로 묶으며, 키-값 쌍으로 이루어집니다.
{
"name": "Lee Jin-woo",
"age": 25,
"isDeveloper": true
}
- "name", "age", "isDeveloper"은 키
- "Lee Jin-woo", 25, true는 값
배열 (Array)
- 대괄호 [] 로 묶으며, 여러 값을 순서대로 저장합니다.
{
"languages": ["Swift", "Kotlin", "JavaScript"]
}
- ["Swift", "Kotlin", "JavaScript"]는 배열로, 세 개의 문자열 값을 포함합니다.
JSON 데이터 타입
JSON에서 지원하는 자료형
- 문자열: "Hello, World!"
- 숫자: 42, 3.14
- 불리언: true, false
- 배열: [1, 2, 3]
- 객체: { "key": "value" }
- null: null
JSON 예시
{
"name": "Lee Jin-woo",
"age": 25,
"isDeveloper": true,
"languages": ["Swift", "Kotlin", "JavaScript"],
"address": {
"city": "Seoul",
"zipcode": "12345"
}
}
- 객체: 전체가 하나의 JSON 객체
- 배열: "languages"의 값이 배열로 여러 프로그래밍 언어를 포함
- 중첩 객체: "address"의 값이 또 다른 JSON 객체
JSON 사용 예시
JSON Encoding (객체를 JSON으로 변환)
Swift에서 객체를 JSON 형식으로 변환할 때는 JSONEncoder를 사용합니다.
import Foundation
// 구조체 정의
struct User: Codable {
let name: String
let age: Int
let isDeveloper: Bool
}
// 객체 생성
let user = User(name: "Lee Jin-woo", age: 25, isDeveloper: true)
// JSON으로 인코딩
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted // 익기 쉽게 출력
if let jsonData = try? encoder.encode(user) {
if let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString)
}
}
JSON Decoding (JSON을 객체로 변환)
서버에서 받은 JSON 데이터를 Swift 객체로 변환할 때는 JSONDecoder를 사용합니다.
import Foundation
// JSON 데이터
let jsonString = """
{
"name": "Lee Jin-woo",
"age": 25,
"isDevelop": true
}
"""
let jsonData = jsonString.data(using: .utf8)!
// 구조체 정의
struct User: Codable {
let name: String
let age: Int
let isDeveloper: Bool
}
// JSON을 객체로 디코딩
let decoder = JSONDecoder()
if let user = try? decoder.decode(User.self, from: jsonData) {
print("Name: \(user.name), Age: \(user.age), Is Developer: \(user.isDeveloper)")
}
JSON의 장점
- 가독성: 사람이 쉽게 읽고 이해할 수 있습니다.
- 경량: 데이터 크기가 작아 네트워크 전송에 적합합니다.
- 언어 독립성: 거의 모든 프로그래밍 언어에서 쉽게 파싱하고 생성할 수 있습니다.
- 웹 친화적: 주로 웹 애플리케이션에서 서버와 클라이언트 간 데이터 교환에 사용됩니다.
JSON의 단점
- 데이터 스키마 없음: JSON에는 강제 스키마가 없으므로 구조적 오류가 발생할 수 있습니다.
- 이진 데이터 비효율적: 텍스트 기반이므로 이진 데이터의 경우 효율성이 떨어집니다.
- 숫자 형식의 제한: JSON에서 정수 및 부동소수점 숫자는 제한된 범위를 가집니다.
JSON의 활용
- API 데이터 전송: 웹 서버와 클라이언트 간의 데이터 교환에 자주 사용됩니다.
- 설정 파일: 간단한 설정 데이터를 저장하는 데 사용됩니다.
- 데이터 저장: 데이터베이스와는 별도로, 간단한 데이터를 저장하고 로드하는 용도로 사용할 수 있습니다.
JSON은 웹, 모바일, 서버 개발에서 널리 사용되며, 단순하고 가볍지만 강력한 데이터 표현 방식으로 다양한 환경에서 필수적인 역할을 합니다.
반응형
'컴퓨터&프로그래밍' 카테고리의 다른 글
디코딩 (Decoding) (2) | 2024.09.30 |
---|---|
인코딩 (Encoding) (4) | 2024.09.30 |
I/O (Input/Output) (2) | 2024.09.27 |
비동기 (Asynchronous) (0) | 2024.09.26 |
동기 (Synchronization) (2) | 2024.09.26 |