2017-10-11 155 views
0

我该如何解析这个JSON?swift从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")!) 

对不起我的英语

回答

0

我清理了一点东西,与guard降NS的东西和保护的结果。

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) 
} 
+0

遗憾,当我从跟踪这个dataTask跳码到结束的代码 –

+0

@ÜmitGündüz这意味着的'guard'条件之一已经失败。 –

+0

@ÜmitGündüz我添加了一个新版本,在某些失败情况下调试更多。 –

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() 
    } 
}