Swift - 解析包含URL的字符串

8

如何解析这个字符串:

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
“将字符串转换为字典”是什么意思?键和值应该是什么? - Max Pevsner
1
你无法反序列化该字符串。它根本不是JSON格式的。 - vadian
@MaxPevsner 我想将这部分 error=Canceled%20By%20User 转换为键值对。 - ava
@vadian,那么如何分离这个字符串值? - ava
@ava 你只需要自己动手写就行了。 - Jakub Trzciński
1个回答

38

可以使用URLComponents解析URL的查询部分。

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)

有问题解析URL,这很有帮助。 - Ivan Cantarino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接