Error

[iOS / Error] Expected to decode Array<Any> but found a dictionary instead 에러 해결

Minny27 2021. 11. 1. 12:09

API를 연동해서 데이터를 가져올 때, 데이터를 디코딩할 때 해당 에러가 발생했습니다.

찾아보니 데이터가 Dictionary 타입인데 Array 타입으로 디코딩할 때 생기는 문제였습니다.

해당 에러를 해결해보겠습니다.

 

 

 

간단한 예시로 설명하겠습니다.

  struct MovieData: Codable {
      var movie: [Movie]
  }

  struct Movie: Codable {
      var typeNumber: Int
      var type: String
      var name: String
  }

  var json = """
  
      {
          "movie": [
              {
                  "typeNumber": 1,
                  "type": "해외",
                  "name": "듄"
              },

              {
                  "typeNumber" : 2,
                  "type" : "국내",
                  "name" : "보이스"
              }
          ]
      }

  """.data(using: .utf8)!
  	
    ...
    
    let decoder = JSONDecoder()
    let movie = try! decoder.decode([MovieData].self, from: self.json)
    print(movie)

영화 데이터를 가지고 있는 json 데이터를 디코딩할 때, "movie 데이터가 배열이네?"라고 생각하고

    let movie = try! decoder.decode([MovieData].self, from: self.json)

위와 같이 작성하면 에러가 발생합니다. "movie" 키의 값이 배열이기 때문에 

다음과 같이 작성하면 정상적으로 작동하는 것을 알 수 있습니다.

    let movie = try! decoder.decode(MovieData.self, from: self.json)

(옵셔널 타입으로 하지 않은 이유는 에러를 확인하기 위해서 입니다.)

 

결과 화면입니다.

 

에러의 내용을 정확하게 해석해서 해결하려고 노력해야 한다는 것을 배웠습니다...