본문 바로가기
🍎 Swift/iOS 학습 노트

[강의노트👩🏻‍💻] JSON(JavaScript Object Notation)와 Codable

by 솔비님 2024. 7. 30.

 

 

1.  JSON 이란?

일반적으로 네트워크에서 데이터를 주고 받을 시 가장 많이 사용하는 데이터 형식
Key-value 형태를 가진다
*특정 프로그래밍 언어에 속하는 것이 아니며, 대부분의 프로그래밍 언어에서 JSON 포맷의 데이터를 다룰 수 있는 기능을 제공하는 것이다

 

 

1-1.  기본적인 형태(전화번호 구조체)

[
    {
        "name": "A",
        "phoneNumber": "010-1111-2222"
    },
    {
        "name": "B",
        "phoneNumber": "010-3333-4444"
    },
    {
        "name": "C",
        "phoneNumber": "010-5555-6666"
    }
]

 

 


2.  Swift 인코딩과 디코딩

인코딩: 데이터를 특정 형식으로 변환
디코딩: 인코딩된 데이터를 다시 원본으로 변환

 

 

Swift에서의 Codable 프로토콜을 채택한다는 것 → 인코딩과 디코딩이 될 수 있다

 

엑스코드에서 Codable을 열어보면 아래와 같이 확인할 수 있다

아래 예제에서 PhoneBook 구조체는 인코딩디코딩이 가능한 객체가 된다는 것을 의미한다

 

 

2-1.  Json 형식의 데이터에서 Swift 로 데이터를 디코딩해서 추출하는 과정

 

아래 예제에서 jsonString은 String으로 Json형식의 데이터를 생성한 것으로 진짜 Json은 아니다

import Foundation

struct PhoneBook: Codable {
    
    let name: String
    let phoneNumber: String
}

// string 으로 json 모양의 데이터를 생성.
let jsonString = """
[
    {
        "name": "Adam",
        "phoneNumber": "010-1111-2222"
    },
    {
        "name": "Eve",
        "phoneNumber": "010-3333-4444"
    },
    {
        "name": "Abel",
        "phoneNumber": "010-5555-6666"
    }
]
"""

// jsonString 으로 jsonData 를 생성
// using .uif8 는 인코딩 방식 중 하나
let jsonData = jsonString.data(using: .utf8)!

// Swift 가 제공하는 JSON 디코더
let jsonDecoder = JSONDecoder()

// JSON -> Codable 디코딩 진행
do {
    let phoneBooks = try jsonDecoder.decode([PhoneBook].self, from: jsonData)
    for phoneBook in phoneBooks {
        print("name: \(phoneBook.name), phoneNumber: \(phoneBook.phoneNumber)")
    }
} catch {
    print("JSON 디코딩 실패")
}