본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.
JSON(JavaScript Object Notation)
속성-값 쌍, 배열 자료형 혹은 기타 모든 시리얼화 가능한 값 혹은 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 어떤 객체를 0과 1로만 저장해 놓으면 읽고 쓰는 방식이 컴퓨터마다 달라 그 객체를 불러오기 어려울 수 있다. 컴퓨터와 컴퓨터 사이에도 0과 1로 변환하는 규칙이 필요하고, JSON은 약속된 표준의 0과 1이다. JSON은 다른 컴퓨터와 데이터를 주고받는 약속이기도 하면서 사람이 읽고 쓰기에 쉽게 한 것이기도 하다. 즉, 특정 메모리에 있는 객체를 사람도 읽기 편하고 컴퓨터끼리도 읽기 편하게 만든 약속이라고 볼 수 있다. JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는 .json이다.
JSON의 형식
JSON은 다음과 같은 형식을 띈다:
{}: 객체(딕셔너리)
[]: 배열
"": 문자열
문자열 외: 숫자
JSON decoding
JSON을 디코딩하는 법은 간단하다:
struct GroceryProduct: Codable {
var name: String
var points: Int
var description: String?
}
let json = """
{
"name": "Durian",
"points": 600,
"description": "A fruit with a distinctive scent."
}
""".data(using: .utf8)!
let decoder = JSONDecoder()
let product = try decoder.decode(GroceryProduct.self, from: json)
print(product.name)
우선 struct를 생성해주고 Codable을 채택해준다. 이 때, 인코딩이 필요 없다면 Decodable을 채택해줘도 좋다. struct 안에는 사용할 변수명들이 들어가게 된다. 이 때, JSON의 변수명이 swift에 적합하지 않은 snake case로 이루어져있다면, enum을 통해 이름을 재정의해줘야한다. 재정의하는 법은 다음과 같다:
struct Accessory: Decodable {
var name: String
var brandName: String
var shortDescription: String
var description: String
private enum CodingKeys: String, CodingKey {
case name
case brandName = "brand_name"
case shortDescription = "short_desc"
case description = "desc"
}
}
변수명을 선언한 아래에 enum을 구현하고, case 뒤에는 실질적으로 swift에서 사용할 이름을, rawValue에는 원래 JSON 파일에 있던 이름을 쓰면 된다.
그리고 나서 JSONDecoder를 decoder등의 이름으로 정의해주고, 정의한 decoder를 사용해주면 된다. 이 때, decode(A, from: B)에서 A의 자리에는 타입이 들어가 줘야하고, B의 자리에는 data가 들어가줘야한다. 만약 JSON이 배열의 형태를 띄고 있다면, [GroceryProduct].self와 같이 배열의 형태의 타입이 들어가줘야한다.
'YAGOM CAREER STARTER' 카테고리의 다른 글
[TIL] 20230224: Initializer (0) | 2023.02.24 |
---|---|
[TIL] 20230223: TableView 코드로 구현하기 (0) | 2023.02.24 |
[TIL] 20230207: Decimal, Closures (0) | 2023.02.08 |
[TIL] 20230206: 메모리, ARC (3) | 2023.02.07 |
[토요스터디A반] 20230204: 고차함수 (0) | 2023.02.06 |