2016-12-19 37 views
0

如何解析这个字符串:斯威夫特 - 解析其中包含一个URL字符串

http://www.ha *** ay.ir/pa***nt/result_false.php?error=Canceled%20By%20User

我尝试使用下面给出的代码将给定的字符串转换为字典。但我得到这个错误:

数据无法被读取,因为它的格式不正确。

这是我的代码:

func webViewDidFinishLoad(_ webView: UIWebView) { 

      print("finish loading") 

      let yourTargetUrl = webView.request?.url?.absoluteString 

      print(yourTargetUrl!) 

      let parse = convertToDictionary(text: yourTargetUrl!) 

     } 

     func convertToDictionary(text: String) -> [String: Any]? { 
      if let data = text.data(using: .utf8) { 
       do { 
        return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] 
       } catch { 
        print(error.localizedDescription) 
       } 
      } 
      return nil 
     } 
+1

解析你所说的 '转换字符串辞典' 意思?关键和价值应该是什么? –

+1

您无法反序列化该字符串。这根本不是JSON。 – vadian

+0

@MaxPevsner我想转换这部分错误=取消%20By%20User键值对 – ava

回答

8

的URL的query的一部分能够与URLComponents

let yourTargetUrl = URL(string:"http://www.foo.ir/baz/result_false.php?error=Canceled%20By%20User")! 

var dict = [String:String]() 
let components = URLComponents(url: yourTargetUrl, resolvingAgainstBaseURL: false)! 
if let queryItems = components.queryItems { 
    for item in queryItems { 
     dict[item.name] = item.value! 
    } 
} 
print(dict) 
+0

谢谢,这真的有帮助 – ava

+0

解析URL有问题,这很有帮助 –