Полученные данные json имеют форму 531 байта и дают ошибку curruptedData в swift 4.1 и Xcode 9.2 - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь получить ответ от сервера, который имеет вид JSON с Swift 4.1 и Xcode 9.2 .Но полученные данные JSON JSONDecoder печатают 531 байт и выдают ошибку

dataCorrupted (Swift.DecodingError.Context (codingPath: [], debugDescription:«Указанные данные не были действительными в формате JSON.», UnderError: Необязательный (Error Domain = NSCocoaErrorDomain Code = 3840 «Текст JSON не начинался с массива или объекта, и параметр, позволяющий не устанавливать фрагменты.» UserInfo = {NSDebugDescription = Текст JSON не былначать с массива или объекта и опции, позволяющей не устанавливать фрагменты.})))

моя задача запроса

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()
}

и моя структура

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"
    }
}

и мой json-файл на сервере

{
    "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"
        }
]
}

тот же самый json-файл отлично работает в Android, но не работает в iOS.Я застрял здесь с очень долгого времени.Все остальные вопросы о StackOverflow говорят о том, что мой JSON-файл недействителен, но работает в другом месте.

Примечание .Не стесняйтесь редактировать мой вопрос, если есть какие-либо проблемы.

Я рассмотрел все подобные вопросы, но ни один из них не работает в моем сценарии.

1 Ответ

0 голосов
/ 25 апреля 2018

решил проблему, просто нужно добавить POST запрос к URL

foodUrl.httpMethod = "POST"
...