Search code examples
iosjsonxcode9.2swift4.1

Received json data is in form of 531 bytes and giving curruptedData error in swift 4.1 and Xcode 9.2


I am trying to get response from server which is in form of JSON with Swift 4.1 and Xcode 9.2. But the received JSON data by JSONDecoder is printing 531 bytes and giving error

dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.})))

my request task is

let itemUrl = URL(string: mainUrl.MainUrl + "viewallstore")
 let foodUrl = URLRequest(url: itemUrl!)
URLSession.shared.dataTask(with: foodUrl) { (data, response, error) in
            print(data ?? "Errrrr")
            if data != nil {
                do {
                    let storeDetails = try JSONDecoder().decode(AllStores.self, from: data!)
                    for store in storeDetails.StoreDetails {
                                           self.foods.append(FoodCourt(storeId: store.str_id, storeNo: store.str_number, storeName: store.str_name, storePhone: store.str_phone, storeParking: store.str_parking, storeOpenTime: store.str_open_time, storeCloseTime: store.str_close_tie, storeStartdate: store.str_open_date, storeCloseDate: store.str_close_date, storeLogoPath: store.str_logo_path, storeLogoFileName: store.str_logo_file_name, storeStatus: store.status, storeCategory: store.str_cat, createdAt: store.create_at, storeZone: store.str_zone, storeAvailability: store.str_availability, storeMulCategory: store.str_multiple_cat))
                    }
                }catch let error {
                    self.toastNeck(message: "\(error)")
                    print(error)
                    DispatchQueue.main.async{
                                            myActivityIndicator.stopAnimating()
                                            myActivityIndicator.hidesWhenStopped = true
                                        }
                }
                DispatchQueue.main.async {
                    self.collectionViewFoodCourt.reloadData()
                    }
            }

        }.resume()
}

and my struct is

struct AllStores: Decodable{

    let StoreDetails: [StoreDetail]

}

struct StoreDetail: Decodable {
    let str_id: String
    let str_number: String
    //let tid : String?  //tid
    let str_name: String
    let str_phone: String
    let str_parking: String
    let str_open_time: String
    let str_close_tie: String
    let str_open_date: String
    let str_close_date: String
    let str_logo_path: String
    let str_logo_file_name: String
    let status: String
    let str_cat: String
    let create_at: String
    let str_zone: String
    let str_availability: String
    let str_multiple_cat: String

    enum CodingKey: String {
        case str_id = "str_id"
        case str_number = "str_number"
        //case tid = "tid"
        case str_name = "str_name"
        case str_phone = "str_phone"
        case str_parking = "str_parking"
        case str_open_time = "str_open_time"
        case str_close_tie = "str_close_tie"
        case str_open_date = "str_open_date"
        case str_close_date = "str_close_date"
        case str_logo_path = "str_logo_path"
        case str_logo_file_name = "str_logo_file_name"
        case status = "status"
        case str_cat = "str_cat"
        case create_at = "create_at"
        case str_zone = "str_zone"
        case str_availability = "str_availability"
        case str_multiple_cat = "str_multiple_cat"
    }
}

and my json file on server is

{
    "StoreDetails": [
        {
            "str_id": "1",
            "str_number": "0",
            "tid": "",
            "str_name": "Moti mahal",
            "str_des": "",
            "str_phone": "9540011581",
            "str_add": "",
            "str_parking": "Ground Floor",
            "str_short_dis": "Moti Mahal",
            "str_open_time": "10:00:00",
            "str_close_tie": "23:00:00",
            "str_open_date": "2017-01-29",
            "str_close_date": "2018-01-28",
            "str_logo_path": "",
            "str_logo_file_name": "Moti mahal.png",
            "status": "Y",
            "str_cat": "1",
            "company_id": "0",
            "str_lat": "0",
            "str_lon": "0",
            "create_at": "2017-02-11 19:45:28",
            "create_by": "0",
            "str_zone": "1",
            "str_floor": "0",
            "str_availability": "1",
            "str_multiple_cat": "1"
        },
        {
            "str_id": "2",
            "str_number": "0",
            "tid": "",
            "str_name": "Ever Green",
            "str_des": "",
            "str_phone": "9953487923",
            "str_add": "",
            "str_parking": "Green Floor",
            "str_short_dis": "Snakes",
            "str_open_time": "10:00:00",
            "str_close_tie": "22:00:00",
            "str_open_date": "2017-02-05",
            "str_close_date": "2017-12-31",
            "str_logo_path": "",
            "str_logo_file_name": "Ever Green.jpg",
            "status": "N",
            "str_cat": "1",
            "company_id": "0",
            "str_lat": "0",
            "str_lon": "0",
            "create_at": "2018-01-15 22:20:11",
            "create_by": "0",
            "str_zone": "1",
            "str_floor": "0",
            "str_availability": "1",
            "str_multiple_cat": "1"
        }
]
}

the same json file is working fine in android but not working in iOS. I am stuck here from a very long time. All the other questions on StackOverflow is stating that my JSON file is not valid but it's working elsewhere.

Note. Feel free to edit my question if there any issues.

I have gone through all the similar questions but none of them is working in my scenario.


Solution

  • solved the issue, just needed to add POST request to the URL

    foodUrl.httpMethod = "POST"