SwiftDeveloper
SwiftDeveloper

Reputation: 7370

Swift 5 Alamofire dictionary parsing error

I want to parse json with Alamofire , in Swift 5 but I didnt get array my codes under below.

My json file

[{"type":"success","data":[{"id":"1","sectionId":"1","title":"test title","detail":"detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text detail test text ","image":"test.jpg","view":"0","status":"1"}]}]

My swift 5 codes

if let json = response.result.value {
                    print(json)
                         if let dictionaryArray = json as? Dictionary<String, AnyObject?> {
                             print(dictionaryArray)
                             let json = dictionaryArray
                             if let type = json["type"] as? String,
                                let results = json["data"] as? Array<Dictionary<String, AnyObject?>> {
                                print(type)
                            for i in 0..<results.count{
                                    let json = results[i]
                                    if let id = json["id"] as? String, let jokeString = json["title"] as? String{
                                        self.items.append(Item(id: id, sectionId : "0", title: jokeString, detail:"", image: "", view : "0", status : "0"))
                                        print(json)

                                }
                            }
                        }
                    }
                }
        }

Any idea? Where have I made a mistake?

Upvotes: 0

Views: 963

Answers (1)

Shehata Gamal
Shehata Gamal

Reputation: 100503

The root is an array so its [[String:Any]]

 if let dictionaryArray = json as? [[String:Any]] {

Btw its better to use Codable

Alamofire.request(url, method: .get, parameters: [:], encoding: JSONEncoding.default, headers: [:]).responseData { res in
    guard let data = res.data else { return } 

      do {
         let res = try JSONDecoder().decode([Root].self, from:data)
         print(res)
      } 
      catch {
         print(error)
     }
}

struct Root: Codable {
    let type: String
    let data: [Datum]
}

// MARK: - Datum
struct Datum: Codable {
    let id, sectionID, title, detail: String
    let image, view, status: String

    enum CodingKeys: String, CodingKey {
        case id
        case sectionID = "sectionId"
        case title, detail, image, view, status
    }
}

Edit:

if let dictionaryArray = json as? [[String:Any?]] {
    for item in dictionaryArray {
        if let type = item["type"] as? String,let results = item["data"] as?  [[String:Any?]] {
            print(type)
            for json in results {
                 if let id = json["id"] as? String, let jokeString = json["title"] as? String {
                    self.items.append(Item(id: id, sectionId : "0", title: jokeString, detail:"", image: "", view : "0", status : "0"))
                    print(json)
                }
            }
        }
    }
}

Upvotes: 2

Related Questions