TIL
🌱 난 오늘 무엇을 공부했을까?
📌 JSON이란?
- JSON(JavaScript Object Notation)은 속성-값 쌍(attribute–value pairs), 배열 자료형(array data types) 또는 기타 모든 시리얼화 가능한 값(serializable value) 또는
"키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다
.
📍 JSON의 기본 자료형
- 수(Number)
- 문자열(String): 0개 이상의 유니코드 문자들의 연속. 문자열은 큰 따옴표(")로 구분하며 역슬래시 이스케이프 문법을 지원한다.
- 참/거짓(Boolean): true 또는 false 값
- 배열(Array): 0 이상의 임의의 종류의 값으로 이루어진 순서가 있는 리스트. 대괄호로 나타내며 요소는 쉼표로 구분한다.
- 객체(Object): 순서가 없는 이름/값 쌍의 집합으로, 이름(키)이 문자열이다.
- null: 빈 값으로, null을 사용한다.
📍 JSON의 장점
- JSON은 텍스트로 이루어져 있으므로, 사람과 기계 모두 읽고 쓰기 쉽다.
- 프로그래밍 언어와 플랫폼에 독립적이므로, 서로 다른 시스템간에 객체를 교환하기에 좋다.
참고
📌 Codable
📍 알고가야 할 목록
- protocol Encodable
- protocol Decodable
- protocol CodingKey
- 인코딩 및 디코딩을 위한 키로 사용할 수 있는 형식(
Int, String
).
- 주로 snake case('_')을 camel case로 바꿀 때 사용(keyDecodingStrategy을 이용하는 방법도 있음! )
- protocol CodingKeyRepresentable
- struct CodingUserInfoKey
- 인코딩 및 디코딩 중에 컨텍스트를 제공하기 위한 사용자 정의 키.
- JSON 개체에서 데이터 유형의 인스턴스를 디코딩하는 개체
- JSONDecoder 인스턴스를 사용하여 디코딩할 수 있도록 Codable을 채택.
📍 공식문서 예제 해석해보기
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)
🔗 Array 형식의 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."
},
{
"name": "Apple",
"points": 200,
"description": "A fruit with a distinctive scent."
}
]
""".data(using: .utf8)!
let decoder = JSONDecoder()
let product = try decoder.decode([GroceryProduct].self, from: json)
print(product[0].name)
print(product[1].name)
Codable
JSONDecoder