首先使用转换响应,
export function amplify() {
let key = "68a92d44-f25a-4bd8-9543-cc95369ae9a0";
return Storage.get(key + ".json",{
download: true
})
.then(function(result) {
return result;
})
.catch(err => console.log(err));
}
转换api响应后,
然后您可以对其进行解码。
let JSON = try! JSONSerialization.data(withJSONObject: yourResponseFromApi,options: JSONSerialization.WritingOptions.prettyPrinted)
,
这是正确的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,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,*) {
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。