Как разобрать этот ответ JSON в Swift - PullRequest
0 голосов
/ 14 мая 2019

все! Поэтому я обычно использую этот код для анализа большинства ответов JSON

Перед кодом, здесь JSON мне нужно получить из него "рабочее пространство"

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [{
        "id": 307,
        "email": "999@ios.net",
        "firstName": "fighter",
        "categories": [],
        "workspace": 302,
        "phone": "25485"
    }]
}

вот мой код:

func getWorkSpace() {
    DispatchQueue.main.async {
        let returnAccessToken: String? = UserDefaults.standard.object(forKey: "accessToken") as? String
        print("UserDefaults Returned Access Token is: \(returnAccessToken!)")
        let access  = returnAccessToken!
        let headers  = [
            "content-type": "application/x-www-form-urlencoded",
            "cache-control": "no-cache",
            "postman-token": "dded3e97-77a5-5632-93b7-dec77d26ba99",
            "Authorization": "JWT \(access)"
        ]
        let request  = NSMutableURLRequest(url: NSURL(string: "https://v5/workspaces/")! as URL,
                                           cachePolicy: .useProtocolCachePolicy,
                                           timeoutInterval: 10.0)

        request.httpMethod          = "GET"
        request.allHTTPHeaderFields = headers

        let session  = URLSession.shared
        let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
            if (error != nil) {
                print(error!)
            } else {
                if let dataNew = data, let responseString = String(data: dataNew, encoding: .utf8) {
                    print("--------")
                    print(responseString)
                    print("--------")

                    DispatchQueue.main.async {
                        do {
                            let json = try JSON(data: data!, options: .allowFragments)
                            let answer = json["results"]
                            let workspace = Int(answer["workspace"].int!)
                        // let workspace = Int(answer["workspace"].string!)!
                        // let workspace  = answer["workspace"].int!
                            print("Workspace is: \(workspace)")
                        } catch {
                            print("Error saving workspace!")
                        }
                    }
                }
            }
        })
        dataTask.resume()
    }
}

Этот код обычно работает для меня, но на этот раз это не так. Пожалуйста, не предлагайте мне использовать Codables, потому что я их еще не изучал. Будет очень признателен, если кто-то укажет мою ошибку и исправит ее.

1 Ответ

0 голосов
/ 14 мая 2019

SwiftyJSON

do {
    let json = try JSON(data: data1!)
    let answer = json["results"].array
    answer?.forEach {
        print($0["workspace"].int!) 
    }

} catch {
    print("Error saving workspace!")
}

JSONSerialization

let json = try! JSONSerialization.jsonObject(with:data, options :[]) as! [String:Any] 
let results = json["results"] as! [[String:Any]]
results.forEach { 
     print($0["workspace"] as! Int)
}

Codable

struct Root : Codable {
   let results:[Model]
}
struct Model: Codable {
    let id: Int
    let email, firstName: String
    let workspace: Int
    let phone: String
}

let res = try! JSONDecoder().decode(Root.self, from:data)
print(res.results)
...