这是正确的 json:
{
"status": 0,
"msg": "success",
"data": {
"numberOfOrder": 3256,
"title_name": "URIBA DEALS",
"title_desc": "Deal & Discount from your nearly shops & services",
"deals": [{
"DealID": "200",
"BusinessID": "279",
"DealType": "specialoffer",
"business_type": "vegetables",
"ImageURL": "",
"CategoryID": "1111",
"categoryType": "",
"ProductID": "0",
"Priority": "-48",
"Status": "1",
"CreatedAt": "2019-11-19 07:57:32",
"PromoCode": "",
"Offer": "0",
"OfferType": "0",
"Branch": "Kharadi(EON)",
"NewLogo": "http://aiotechnology.in/AmanoraKatta/AdminPanel/deals_new_img/1574148777.jpg",
"userAcquisitionStatus": "0",
"maxOrder": "0",
"minOrder": "0",
"userAcquisitionDiscount": "0",
"dealFrom": "0000-00-00 00:00:00",
"dealTo": "0000-00-00 00:00:00",
"deal_description": "Onion @ Rs 17 half kg (Pick Onion From Amanora Office) ( limit 1 kg per person )",
"from_time": "00:00:00",
"to_time": "00:00:00",
"from_date": "0000-00-00",
"to_date": "0000-00-00",
"deal_delivery_charges": "9",
"app_Version": "0",
"walletAmount": "0",
"name": "UriBA Vegetables Kharadi",
"delivery_status_flag": "0",
"delivery_days_after": "1",
"business_address": "Kharadi, Pune",
"min_order_amt": "12",
"latitude": "18.5578469",
"longitude": "73.9449945",
"delivery_timings": "9 AM to 9 PM",
"CST": "0",
"GST": "0",
"DELI_CHRGS": "0",
"PACK_CHRGS": "2",
"displayimage": "1571221633.jpg",
"logo_icon": "",
"business_margin": "0",
"business_margin_flag": "0"
}]
}
}
这是模型:
// This file was generated from JSON Schema using quicktype, do not modify it directly.
// To parse the JSON, add this file to your project and do:
//
// let dealModel = try? newJSONDecoder().decode(DealModel.self, from: jsonData)
//
// To parse values from Alamofire responses:
//
// Alamofire.request(url).responseDealModel { response in
// if let dealModel = response.result.value {
// ...
// }
// }
import Foundation
import Alamofire
// MARK: - DealModel
class DealModel: Codable {
let status: Int?
let msg: String?
let data: DataClass?
init(status: Int?, msg: String?, data: DataClass?) {
self.status = status
self.msg = msg
self.data = data
}
}
//
// To parse values from Alamofire responses:
//
// Alamofire.request(url).responseDataClass { response in
// if let dataClass = response.result.value {
// ...
// }
// }
// MARK: - DataClass
class DataClass: Codable {
let numberOfOrder: Int?
let titleName, titleDesc: String?
let deals: [Deal]?
enum CodingKeys: String, CodingKey {
case numberOfOrder
case titleName = "title_name"
case titleDesc = "title_desc"
case deals
}
init(numberOfOrder: Int?, titleName: String?, titleDesc: String?, deals: [Deal]?) {
self.numberOfOrder = numberOfOrder
self.titleName = titleName
self.titleDesc = titleDesc
self.deals = deals
}
}
//
// To parse values from Alamofire responses:
//
// Alamofire.request(url).responseDeal { response in
// if let deal = response.result.value {
// ...
// }
// }
// MARK: - Deal
class Deal: Codable {
let dealID, businessID, dealType, businessType: String?
let imageURL, categoryID, categoryType, productID: String?
let priority, status, createdAt, promoCode: String?
let offer, offerType, branch: String?
let newLogo: String?
let userAcquisitionStatus, maxOrder, minOrder, userAcquisitionDiscount: String?
let dealFrom, dealTo, dealDescription, fromTime: String?
let toTime, fromDate, toDate, dealDeliveryCharges: String?
let appVersion, walletAmount, name, deliveryStatusFlag: String?
let deliveryDaysAfter, businessAddress, minOrderAmt, latitude: String?
let longitude, deliveryTimings, cst, gst: String?
let deliChrgs, packChrgs, displayimage, logoIcon: String?
let businessMargin, businessMarginFlag: String?
enum CodingKeys: String, CodingKey {
case dealID = "DealID"
case businessID = "BusinessID"
case dealType = "DealType"
case businessType = "business_type"
case imageURL = "ImageURL"
case categoryID = "CategoryID"
case categoryType
case productID = "ProductID"
case priority = "Priority"
case status = "Status"
case createdAt = "CreatedAt"
case promoCode = "PromoCode"
case offer = "Offer"
case offerType = "OfferType"
case branch = "Branch"
case newLogo = "NewLogo"
case userAcquisitionStatus, maxOrder, minOrder, userAcquisitionDiscount, dealFrom, dealTo
case dealDescription = "deal_description"
case fromTime = "from_time"
case toTime = "to_time"
case fromDate = "from_date"
case toDate = "to_date"
case dealDeliveryCharges = "deal_delivery_charges"
case appVersion = "app_Version"
case walletAmount, name
case deliveryStatusFlag = "delivery_status_flag"
case deliveryDaysAfter = "delivery_days_after"
case businessAddress = "business_address"
case minOrderAmt = "min_order_amt"
case latitude, longitude
case deliveryTimings = "delivery_timings"
case cst = "CST"
case gst = "GST"
case deliChrgs = "DELI_CHRGS"
case packChrgs = "PACK_CHRGS"
case displayimage
case logoIcon = "logo_icon"
case businessMargin = "business_margin"
case businessMarginFlag = "business_margin_flag"
}
init(dealID: String?, businessID: String?, dealType: String?, businessType: String?, imageURL: String?, categoryID: String?, categoryType: String?, productID: String?, priority: String?, status: String?, createdAt: String?, promoCode: String?, offer: String?, offerType: String?, branch: String?, newLogo: String?, userAcquisitionStatus: String?, maxOrder: String?, minOrder: String?, userAcquisitionDiscount: String?, dealFrom: String?, dealTo: String?, dealDescription: String?, fromTime: String?, toTime: String?, fromDate: String?, toDate: String?, dealDeliveryCharges: String?, appVersion: String?, walletAmount: String?, name: String?, deliveryStatusFlag: String?, deliveryDaysAfter: String?, businessAddress: String?, minOrderAmt: String?, latitude: String?, longitude: String?, deliveryTimings: String?, cst: String?, gst: String?, deliChrgs: String?, packChrgs: String?, displayimage: String?, logoIcon: String?, businessMargin: String?, businessMarginFlag: String?) {
self.dealID = dealID
self.businessID = businessID
self.dealType = dealType
self.businessType = businessType
self.imageURL = imageURL
self.categoryID = categoryID
self.categoryType = categoryType
self.productID = productID
self.priority = priority
self.status = status
self.createdAt = createdAt
self.promoCode = promoCode
self.offer = offer
self.offerType = offerType
self.branch = branch
self.newLogo = newLogo
self.userAcquisitionStatus = userAcquisitionStatus
self.maxOrder = maxOrder
self.minOrder = minOrder
self.userAcquisitionDiscount = userAcquisitionDiscount
self.dealFrom = dealFrom
self.dealTo = dealTo
self.dealDescription = dealDescription
self.fromTime = fromTime
self.toTime = toTime
self.fromDate = fromDate
self.toDate = toDate
self.dealDeliveryCharges = dealDeliveryCharges
self.appVersion = appVersion
self.walletAmount = walletAmount
self.name = name
self.deliveryStatusFlag = deliveryStatusFlag
self.deliveryDaysAfter = deliveryDaysAfter
self.businessAddress = businessAddress
self.minOrderAmt = minOrderAmt
self.latitude = latitude
self.longitude = longitude
self.deliveryTimings = deliveryTimings
self.cst = cst
self.gst = gst
self.deliChrgs = deliChrgs
self.packChrgs = packChrgs
self.displayimage = displayimage
self.logoIcon = logoIcon
self.businessMargin = businessMargin
self.businessMarginFlag = businessMarginFlag
}
}
// MARK: - Helper functions for creating encoders and decoders
func newJSONDecoder() -> JSONDecoder {
let decoder = JSONDecoder()
if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
decoder.dateDecodingStrategy = .iso8601
}
return decoder
}
func newJSONEncoder() -> JSONEncoder {
let encoder = JSONEncoder()
if #available(iOS 10.0, OSX 10.12, tvOS 10.0, watchOS 3.0, *) {
encoder.dateEncodingStrategy = .iso8601
}
return encoder
}
// MARK: - Alamofire response handlers
extension DataRequest {
fileprivate func decodableResponseSerializer<T: Decodable>() -> DataResponseSerializer<T> {
return DataResponseSerializer { _, response, data, error in
guard error == nil else { return .failure(error!) }
guard let data = data else {
return .failure(AFError.responseSerializationFailed(reason: .inputDataNil))
}
return Result { try newJSONDecoder().decode(T.self, from: data) }
}
}
@discardableResult
fileprivate func responseDecodable<T: Decodable>(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<T>) -> Void) -> Self {
return response(queue: queue, responseSerializer: decodableResponseSerializer(), completionHandler: completionHandler)
}
@discardableResult
func responseDealModel(queue: DispatchQueue? = nil, completionHandler: @escaping (DataResponse<DealModel>) -> Void) -> Self {
return responseDecodable(queue: queue, completionHandler: completionHandler)
}
}
像这样调用almofire请求
Alamofire.request(url, method:.post, parameters: parameters, headers: headers)
.responseDealModel(completionHandler: { (response) in
switch response.result {
case .success(let result):
print("success")
case .failure(let error):
print("fail")
}
})
.responseString { (response) in
print(response.result.value ?? "NO Response")
}
用户https://jsonlint.com/ 验证用于创建模型的 json 和 quicktype。