'Unable to get JSON response with Decodable in Swift

in postman response structure like this:

 {
"categories": [
    {
        "id": 48,
        "name": "Round-The-Clock",
        "description": "24 hours round the clock menu",
        "status": "enabled",
        "products": [
            {
                "id": 280,
                "name": ".Tea",.....

for this i have created Decodable model like this

 struct Categories: Codable {
let categories: [Category]?
let featuredProducts: [Product]?
 //coding keys..
 }
 struct Category: Codable {
let id: Int?
let name, categoryDescription: String?
let products: [Product]?
 }

 struct Product: Codable {
let id: Int?
let name, productDescription: String?
}

Parsing code: with this code break point hits with this if let jsonData = try? decoder.decode(Categories.self, from: respData) line but not hitting print("the categories are: (jsonData)") line and nothing comes in console, why? where am i wrong.. how to get response

class FoodMenuViewController: UIViewController {

private var catData: Categories? {
    didSet{ }
}

func foodMenuServicecall(){

let urlStr = "http://54.149.84.126/categories?shop=1"
let url = URL(string: urlStr)
var req =  URLRequest(url: url!)
req.httpMethod = "GET"
req.addValue("X-Requested-With", forHTTPHeaderField: "Content-Type")
req.addValue("XMLHttpRequest", forHTTPHeaderField: "X-Requested-With")

URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in

    guard let respData = data else {return}
    guard error == nil else {
        print("error")
        return
    }
    do{
        let decoder = JSONDecoder()
        if let jsonData = try? decoder.decode(Categories.self, from: respData) {
            print("the categories are: \(jsonData)")
            self.catData = jsonData
        }
    }
    catch {print("catch error")}
}).resume()
}

EDIT: if i test like this i am getting response but here

 func foodMenuServicecall(){
    if let url = URL(string: "http://54.149.84.126//categories?shop=1"){
        var req = URLRequest(url: url)
        req.allHTTPHeaderFields = ["X-Requested-With" : "XMLHttpRequest"]

        URLSession.shared.dataTask(with: req) { data, _, err in
            guard let safeData = data else{return}
            print(String(data: safeData, encoding: .utf8) ?? "")
        }.resume()
    }
}

o/p in consol:

enter image description here



Solution 1:[1]

Your decodable model expects a key of "categoryDescription", your JSON has a key of "description".

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 HunterLion