[swift] Swift Moya에서 JSON 파싱하기

Swift Moya는 Alamofire 기반의 네트워킹 라이브러리로, JSON 데이터를 쉽게 파싱할 수 있도록 도와줍니다. 이번 글에서는 Swift Moya를 사용하여 JSON 데이터를 파싱하는 방법에 대해 알아보겠습니다.

요구 사항

다음과 같은 요구 사항이 있어야 합니다.

설치

먼저, Cocoapods를 사용하여 Moya와 Alamofire를 설치해야 합니다.

Podfile에 다음과 같이 작성한 후, pod install 명령어를 실행하여 설치합니다.

platform :ios, '11.0'
use_frameworks!

target 'YourProject' do
  pod 'Moya', '~> 14.0'
end

JSON 파싱하기

JSON 파싱을 위해 먼저, Moya의 provider를 생성해야 합니다. API의 기본 URL 및 요청에 필요한 파라미터 등을 설정합니다.

import Moya

enum API {
    case getUsers
}

extension API: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.example.com")!
    }

    var path: String {
        switch self {
        case .getUsers:
            return "/users"
        }
    }

    // 요청 메소드 설정 (GET, POST 등)
    var method: Moya.Method {
        switch self {
        case .getUsers:
            return .get
        }
    }

    // 필요한 파라미터 설정
    var task: Task {
        switch self {
        case .getUsers:
            return .requestPlain
        }
    }

    // 테스트용 stub 데이터 설정
    var sampleData: Data {
        switch self {
        case .getUsers:
            return stubbedResponse("Users")
        }
    }

    // HTTP 헤더 설정
    var headers: [String: String]? {
        return ["Content-type": "application/json"]
    }

    // Alamofire를 통해 네트워크 요청
    var validationType: ValidationType {
        return .successCodes
    }
}

private func stubbedResponse(_ filename: String) -> Data! {
    @objc class TestClass: NSObject { }

    let bundle = Bundle(for: TestClass.self)
    let path = bundle.path(forResource: filename, ofType: "json")
    return (try? Data(contentsOf: URL(fileURLWithPath: path!)))
}

이제 위에서 정의한 API 요청을 호출하여 응답을 받아올 수 있습니다.

let provider = MoyaProvider<API>()
provider.request(.getUsers) { result in
    switch result {
    case .success(let response):
        do {
            let json = try JSONSerialization.jsonObject(with: response.data, options: []) as? [String: Any]
            // JSON 파싱 후 사용하고자 하는 데이터 처리
        } catch {
            print("JSON 파싱 에러: \(error)")
        }
    case .failure(let error):
        print("네트워크 에러: \(error)")
    }
}

위 코드에서는 Moya의 request 메소드를 사용하여 API를 호출한 후, 응답 결과를 처리하는 부분을 확인할 수 있습니다. JSON 파싱을 위해 JSONSerialization을 사용하며, 파싱된 데이터를 원하는 형태로 처리할 수 있습니다.

결론

본 글에서는 Swift Moya를 사용하여 JSON 데이터를 파싱하는 방법에 대해 알아보았습니다. Moya를 활용하면 훨씬 간결하고 효율적인 네트워킹 코드를 작성할 수 있습니다. JSON 데이터 처리에 대한 더 자세한 내용은 Moya 공식 문서를 참고하시기 바랍니다.