в моем коде я не могу расшифровать свой ответ, который я получаю от API. Я нахожу данные, но мой декодер не может их расшифровать, я пытался найти проблему, но не могу это выяснить.
Мой код:
var request = URLRequest(url: URL(string: "http://wsapi.easyservice.xyz/api/v1/carts/2")!,timeoutInterval: Double.infinity)
request.addValue("Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImI0YzFkOTRhN2ZmN2I0OGE1MTI3ZWMyZTAxYzJhYzMxNzRkODIxYjVkYTlhMTE3N2NlNTUxODViNTZjZDEyNjY2NWI2ZjVhOGU2NTM1ZDExIn0.eyJhdWQiOiIxIiwianRpIjoiYjRjMWQ5NGE3ZmY3YjQ4YTUxMjdlYzJlMDFjMmFjMzE3NGQ4MjFiNWRhOWExMTc3Y2U1NTE4NWI1NmNkMTI2NjY1YjZmNWE4ZTY1MzVkMTEiLCJpYXQiOjE2MDU1MDk1MDEsIm5iZiI6MTYwNTUwOTUwMSwiZXhwIjoxNjM3MDQ1NTAxLCJzdWIiOiI0NTIiLCJzY29wZXMiOltdfQ.cHR-jRG4atU8DtwqiQtxV9vjRg4CMR9dYH8AGpgKgOmbylSLlf8eYf76LmwVOZl9Ii1uxHXvK95_43suYuO_6REE_pMEgRKELxM9LZVPSt6VboXENqwBZ_1GCu4nobBUPPqC56SXYqTVaLlTSjts7O3kpXrPqhrEIWV0UQYq9KS6bUFMkQuuyDrXoL6JVuJ-ntUzU42QgXjaQ0usQah3-gJZGAB684bp6LP3_RTInuIDKarGERPKHIFz94V_jvpkixKBUQW1uDJpcSh9v2ZR1PVlQ1pMaYGaZN50OrTkqY9NTi16PpUhOrmzCcXFLxWC4S-s2FDlXfPZNS-1kEIguS38ecydyBW_FHSzJQFQHZ5STTNiLxB8B5-6OUwEaaXBl9XuJJBlcmUrMiQNjqb2TXL9ZNw1R6Htqgrn2En0RjgzuWXSLui1PgkyRJMifg2cphPpQlNhgkXqZrPz27_xp8CCfUjdiEFEWFdFj-4_grRPjLXA48alG6KeFGi_Vu65rVNCz9yF5M4U43G9KJZCg8-nppKZ623OvE4YxU8IS7SuTuQIHChFPaVef-D7GYLnZEPl7L7bo5IuUiwZ67wP0zieKsEya3_LDNy_tUG48k-y5KTl0OOIn4GtmDdCAK4qKcAC_0OjWmktesJRbgh3Nm9O_CIl_DBUZ89fMks0SsA", forHTTPHeaderField: "Authorization")
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let jsonResponse = try? JSONDecoder().decode(GetItCartModel.self, from: data!) {
print(jsonResponse)
}
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}
task.resume()
и я использую эту модель как GetItCartModel
// MARK: - GetItCartModel
struct GetItCartModel: Codable {
var success: Bool?
var message: String?
var data: GetItCartModelDataClass?
}
// MARK: - DataClass
struct GetItCartModelDataClass: Codable {
var id, userID, serviceID: Int?
var createdAt, updatedAt: String?
var items: [GetItCartModelItem]?
enum CodingKeys: String, CodingKey {
case id
case userID = "user_id"
case serviceID = "service_id"
case createdAt = "created_at"
case updatedAt = "updated_at"
case items
}
}
// MARK: - Item
struct GetItCartModelItem: Codable {
var id, cartID: Int?
var details: GetItCartModelDetails?
var attachments: JSONNull?
var quantity, createdAt, updatedAt: String?
enum CodingKeys: String, CodingKey {
case id
case cartID = "cart_id"
case details, attachments, quantity
case createdAt = "created_at"
case updatedAt = "updated_at"
}
}
// MARK: - Details
struct GetItCartModelDetails: Codable {
var brandID: Int?
var brandName: String?
var icategoryIdd: Int?
var categoryName, endDate: String?
var id, orderItemPrice: Int?
var product: Product?
var quantity: Int?
var startDate: String?
var totalDays: Int?
var typeID: Int?
var typeName: String?
enum CodingKeys: String, CodingKey {
case brandID = "brandId"
case brandName, icategoryIdd, categoryName, endDate, id, orderItemPrice, product, quantity, startDate, totalDays
case typeID = "typeId"
case typeName
}
}
// MARK: - Product
struct GetItCartModelProduct: Codable {
var categorizableID: Int?
var createdAt, productDescription: String?
var id: Int?
var price: String?
var thumbnail: String?
var title, updatedAt: String?
enum CodingKeys: String, CodingKey {
case categorizableID = "categorizable_id"
case createdAt = "created_at"
case productDescription = "description"
case id, price, thumbnail, title
case updatedAt = "updated_at"
}
}
Пожалуйста, помогите мне найти реальную проблему, с которой я столкнулся, чтобы преобразовать мой ответ в эту модель.
Примечание. Вот ответ почтальона в формате JSON.
{
"success": true,
"message": "items list",
"data": {
"id": 23,
"user_id": 452,
"service_id": 2,
"created_at": "2020-11-16 13:21:36",
"updated_at": "2020-11-16 13:21:36",
"items": [
{
"id": 54,
"cart_id": 23,
"details": {
"brandId": 44,
"brandName": "Apple",
"icategoryIdd": 41,
"categoryName": "Mobile Equipment",
"endDate": "2020-12-26",
"id": 0,
"orderItemPrice": 4920,
"product": {
"categorizable_id": 44,
"created_at": "2020-07-24 05:46:07",
"description": "Description",
"id": 11,
"price": "120.00",
"thumbnail": "https://hexamatics.s3.ap-south-1.amazonaws.com/app/photos/product/kkoBnHm7cqjWzPTh4nPdaxuPaTDylNdNDqlCFKLz.jpeg",
"title": "Test product",
"updated_at": "2020-08-25 12:14:21"
},
"quantity": 1,
"startDate": "2020-11-16",
"totalDays": 41,
"typeId": 42,
"typeName": "Display"
},
"attachments": null,
"quantity": "1",
"created_at": "2020-11-16 13:21:36",
"updated_at": "2020-11-16 13:21:36"
},
{
"id": 97,
"cart_id": 23,
"details": {
"categoryName": "Mobile Equipment",
"startDate": "2020-11-18 09:20:32 +0000",
"brandId": "44",
"product": {
"thumbnail": "https://hexamatics.s3.ap-south-1.amazonaws.com/app/photos/product/kkoBnHm7cqjWzPTh4nPdaxuPaTDylNdNDqlCFKLz.jpeg",
"categorizable_id": 44,
"created_at": "2020-07-24 05:46:07",
"title": "Test product",
"updated_at": "2020-08-25 12:14:21",
"description": "Description",
"id": 11,
"price": "120.00"
},
"icategoryIdd": "41",
"typeId": "42",
"typeName": "Display",
"brandName": "Apple",
"quantity": "1",
"endDate": "2020-11-18 09:20:36 +0000"
},
"attachments": null,
"quantity": "1",
"created_at": "2020-11-18 09:20:51",
"updated_at": "2020-11-18 09:20:51"
},
{
"id": 98,
"cart_id": 23,
"details": {
"brandId": 44,
"brandName": "Apple",
"icategoryIdd": 41,
"categoryName": "Mobile Equipment",
"endDate": "2020-11-18",
"id": 0,
"orderItemPrice": 120,
"product": {
"categorizable_id": 44,
"created_at": "2020-07-24 05:46:07",
"description": "Description",
"id": 11,
"price": "120.00",
"thumbnail": "https://hexamatics.s3.ap-south-1.amazonaws.com/app/photos/product/kkoBnHm7cqjWzPTh4nPdaxuPaTDylNdNDqlCFKLz.jpeg",
"title": "Test product",
"updated_at": "2020-08-25 12:14:21"
},
"quantity": 1,
"startDate": "2020-11-18",
"totalDays": 1,
"typeId": 42,
"typeName": "Display"
},
"attachments": null,
"quantity": "1",
"created_at": "2020-11-18 10:16:18",
"updated_at": "2020-11-18 10:16:18"
}
]
}
}
try?
при декодировании json, загруженного из какого-либо API. Используйтеtry
сdo/catch
и напечатайте ошибку в улове,catch { print(error) }
. Может быть, это даже поможет вам решить эту проблему самостоятельно :). Еще одна вещь, которую я только что заметил, это то, что вы сначала пытаетесь декодировать данные, а затем проверяете, получили ли вы какие-либо данные, это, конечно, должно быть сделано в обратном порядке. - person Joakim Danielson   schedule 18.11.2020