import Foundation
struct WebsiteDescription: Decodable {
let nhits: Int?
let parameters: Params
let records: [Record]
}
struct Params: Decodable {
let dataset: String?
let timezone: String?
let UTC: String?
let rows: Int?
let format: String?
}
struct Record: Decodable {
let datasetid: String?
let recordid: String?
let fields: Field
let record_timestamp: String?
}
struct Field: Decodable {
let category: String?
let units_per_100ml: Double?
let style: String?
let units_o_alcohol: Double?
let quantity_units: String?
let package: String?
let brand: String?
let product: String?
let volume: Double?
let abv: Double?
let units: Double?
let quantity: Double?
}
class JsonParser {
var bevArray : [Beverage.BeverageStruct] = []
var selectedBrandArr = ""
var jsonUrlString = "https://public.opendatasoft.com/api/records/1.0/search/?dataset=units-of-alcohol&refine.brand="
func queryJson(brand: String){
let url = (URL(string: jsonUrlString + brand) ?? URL(string: ""))
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
guard let dataResponse = data,
error == nil else {
print(error?.localizedDescription ?? "Response Error")
return }
do{
//ALL Results
/* let jsonResponse = try JSONSerialization.jsonObject(with:
dataResponse, options: []) as? [String: Any]
print(jsonResponse)
*/
let decoder = try JSONDecoder().decode(WebsiteDescription.self, from: dataResponse)
for jsonData in decoder.records {
var bevStructs = Beverage.BeverageStruct(product: jsonData.fields.product, packaging: jsonData.fields.package, brand: jsonData.fields.brand, quantity: jsonData.fields.quantity)
self.bevArray.append(bevStructs)
}
} catch let parsingError {
print("Error", parsingError)
}
}
task.resume()
}
}