Как разобрать JSONObject в SWIFT - PullRequest
0 голосов
/ 07 июля 2019

У меня есть API-файл, который возвращает следующее JSONObject

{"result":[{"eventID":"1","regionID":"2","venue":"Saxafi Hotel","eventName":"VDATE","startDateTime":"2019-04-17 16:00:00","endDateTime":"2019-04-18 21:30:00"}]}

Я могу разобрать, если его JSONArray

[{"eventID":"1","regionID":"2","venue":"Saxafi Hotel","eventName":"VDATE","startDateTime":"2019-04-17 16:00:00","endDateTime":"2019-04-18 21:30:00"}]

func parseJSON(_ data: Data){
    var jsonResult = NSArray()

    do{
        jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! NSArray

    }catch let error as NSError{
        print(error)
    }

    var jsonElement = NSDictionary()
    let stocks = NSMutableArray()

    for i in 0 ..< jsonResult.count
    {
        jsonElement = jsonResult[i] as! NSDictionary
        let stock = StockModel()

        if let name = jsonElement["venue"] as? String,
            let price = jsonElement["regionID"] as? String

                {
                print(name)
                print(price)
                stock.name = name
                stock.price = price
                }
        stocks.add(stock)
    }
    DispatchQueue.main.async(execute: {() -> Void in
    self.delegate.itemsDownload(items: stocks)
    })
}

Я новичок в IOS Я знаком с Android и я использовал для разбора этого

JSONObject object = new JSONObject(response); JSONArray array=object.getJSONArray("result");

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Ваши типы данных будут выглядеть,

// MARK: - Response
struct Response: Codable {
    let result: [Result]
}

// MARK: - Result
struct Result: Codable {
    let eventID, regionID, venue, eventName: String
    let startDateTime, endDateTime: String
}

// Получить данные из API и декодировать ответ, как показано ниже,

do {
    let response = try JSONDecoder().decode(Response.self, from: data)
    response.result.forEach { result in
       print(result.eventName)
    }
} catch {
    print(error)
}
0 голосов
/ 07 июля 2019

Вы можете попробовать

struct Root:Codable { 
    let result:[Result]
}

struct Result:Codable {
    let eventID,regionID,venue,eventName:String
    let startDateTime,endDateTime:Date
}

        do {

            let dec = JSONDecoder()
            let df = DateFormatter()
            df.dateFormat = "yyy-MM-dd HH:mm:ss"
            dec.dateDecodingStrategy = .formatted(df)
            let res  = try dec.decode(Root.self, from:data)
        }
        catch {
            print(error)
        }

Или вы можете избавиться от Root и сделать

        do {

            let con = try JSONSerialization.jsonObject(with:data) as! [String:Any]
            let www = try JSONSerialization.data(withJSONObject:con["result"]!)
            let dec = JSONDecoder()
            let df = DateFormatter()
            df.dateFormat = "yyy-MM-dd HH:mm:ss"
            dec.dateDecodingStrategy = .formatted(df)
            let res  = try dec.decode([Result].self, from:www)
            print(res)
        }
        catch {
            print(error)
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...