UIKit - JSONDecoder, JSONEncoder를 통해서 JSON 문자열 직렬화 및 역직렬화 처리하기
UIKit - JSONDecoder, JSONEncoder를 통해서 JSON 문자열 직렬화 및 역직렬화 처리하기
JSONDecoder, JSONEncoder를 통해서 JSON 문자열 직렬화 및 역직렬화 처리하기
JSONDecoder:JSON문자열을 Swift 구조체 또는 클래스로 변환할 때 사용.- 변환되는 구조체 또는 클래스는
Decodable또는Codable프로토콜을 구현하고 있어야만함.
- 변환되는 구조체 또는 클래스는
JSONEncoder: Swift 구조체 또는 클래스를JSON문자열로 변환할 때 사용.- 변환되는 구조체 또는 클래스는
Encodable또는Codable프로토콜을 구현하고 있어야만함.
- 변환되는 구조체 또는 클래스는
Codable프로토콜은Decodable,Encodable을 모두 포함하고 있는 프로토콜임.
사용 예시
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import UIKit
// API에 정의되어 있는 Request
// Codable 프로토콜: 객체 직렬화, 역직렬화를 위해 구현해줘야함.
struct RegisterRequest: Codable{
let email: String
let password: String
let nickname: String
}
// API 응답 래퍼
struct ResponseWrapper: Codable {
let status: Int
let success: Bool
let message: String
let result: Result
let timestamp: String
}
// API 응답 결과
struct Result: Codable {
let userSeq: Int
let email, role, nickname, provider: String
let createdAt, modifiedAt: String
}
let registerRequest = RegisterRequest(email: "test123456@gmail.com", password: "test1234!", nickname: "테스트유저100")
func encodeJson(request: RegisterRequest) -> Data?{
do{
// JSON Encoder 생성
let encoder = JSONEncoder()
// Swift 구조체 직렬화 (JSON 문자열로 변환)
let json = try encoder.encode(request)
return json
}catch{
print(error)
return nil
}
}
func decodeJson(data: Data) -> Result? {
do{
// JSON Decoder 생성
let decoder = JSONDecoder()
// JSON 문자열 역직렬화 (Swift 객체로 변환)
let decodedData = try decoder.decode(ResponseWrapper.self, from: data)
return decodedData.result
}catch{
print(error)
return nil
}
}
// URL 객체 생성
let url = URL(string: "http://localhost:9000/api/v1/auth/register")!
// URLRequest 생성
var request = URLRequest(url: url)
let json = encodeJson(request: registerRequest)!
request.httpMethod = "POST" // HTTP 메서드 설정
request.httpBody = json // HTTP 요청 본문 설정
request.addValue("application/json", forHTTPHeaderField: "Content-Type") // HTTP 헤더 설정
// URLSession 생성 및 작업 정의
URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error{
print(error)
return
}
if let data = data{
let result = decodeJson(data: data)
if let result = result {
print(result)
}
}
}.resume() // 작업 실행
결과
1
Result(userSeq: 13, email: "test123456@gmail.com", role: "ROLE_USER", nickname: "테스트유저100", provider: "LIBRONOTE", createdAt: "2025-11-03T12:40:47", modifiedAt: "2025-11-03T12:40:47")
This post is licensed under CC BY 4.0 by the author.