swift从URL解析JSON

时间:2017-10-11 18:59:10

标签: json swift parsing url

如何解析此JSON?

{  
   "telefon":"05538690671"
}

我的代码:

    let url = NSURL(string: "http://localhost.192.168.1.40.xip.io:8888/store1.php")

    //fetching the data from the url
    URLSession.shared.dataTask(with: (url as URL?)!, completionHandler: {(data, response, error) -> Void in

        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {

            //printing the json in console
            print(jsonObj!.value(forKey: "telefon")!)

抱歉我的英文

2 个答案:

答案 0 :(得分:0)

使用Alamofire(https://github.com/Alamofire/Alamofire)获取数据。

将Alamofire添加到您的项目中。

要解析的自定义类

    import UIKit
    import Alamofire

    typealias DownloadComplete = () -> ()

    class YourClassName {

    private var _telefon: String!

    var telefon: String {
            if _telefon == nil {
                _telefon = ""
            }
            return _telefon
        }

    func downloadDetails(completed: @escaping DownloadComplete) {
            let currentURL = URL(string: "http://localhost.192.168.1.40.xip.io:8888/store1.php")!
            Alamofire.request(currentURL).responseJSON { response in
                let result = response.result
            if let dict = result.value as? Dictionary<String, AnyObject> {
                if let telefon = dict["telefon"] as? String {
                self._telefon = telefon
                }
            }
            }
      completed()
    }
}

答案 1 :(得分:0)

我清理了一些东西,删除了NS内容并使用guard保护了结果。

let url = URL(string: "http://localhost.192.168.1.40.xip.io:8888/store1.php")!

URLSession.shared.dataTask(with: url) { data, _, _ in
    guard let data = data else { return }
    guard let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) else { return }
    guard let jsonObj = json as? [String: Any] else { return }

    guard let telefon = jsonObj["telefon"] as? String else { return }

    print(telefon)
}

多一点调试。

let url = URL(string: "http://localhost.192.168.1.40.xip.io:8888/store1.php")!

URLSession.shared.dataTask(with: url) { data, _, _ in
    guard let data = data, !data.isEmpty else {
        print("Error: data is nil or empty")
        return
    }

    guard let json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) else {
        print("Error: data contains no JSON")
        return
    }

    guard let jsonObj = json as? [String: Any] else {
        print("Error: JSON is not a dictionary")
        return
    }

    guard let telefon = jsonObj["telefon"] as? String else {
        print("Error: Object has no 'telefon' key")
        return
    }

    print(telefon)
}