Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

JSON 본문

컴퓨터&프로그래밍

JSON

JangJupyo 2024. 9. 30. 14:00
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