解析URL字符串以获取键值的最佳方法?

我需要解析这样的URL字符串:

&ad_eurl=http://www.youtube.com/video/4bL4FI1Gz6s&hl=it_IT&iv_logging_level=3&ad_flags=0&endscreen_module=http://s.ytimg.com/yt/swfbin/endscreen-vfl6o3XZn.swf&cid=241&cust_gender=1&avg_rating=4.82280613104

我需要将NSString拆分为类似cid=241和的标志部分&avg_rating=4.82280613104。我一直在用,substringWithRange:但是值以随机顺序返回,所以搞砸了。是否有任何类可以轻松解析,因此您基本上可以将其转换为NSDictionary以便能够读取键的值(例如ValueForKey:cid应该返回241)。还是有比使用NSMakeRange子字符串更简单的解析方法?

回答:

**编辑(2018年6月):[

这个答案更好

您可以queryItems在中使用URLComponents。

当获得该属性的值时,NSURLComponents类将解析查询字符串并返回一个NSURLQueryItem对象数组,每个对象代表一个键-值对,并按照它们在原始查询字符串中出现的顺序排列。

let url = "http://example.com?param1=value1&param2=param2"

let queryItems = URLComponents(string: url)?.queryItems

let param1 = queryItems?.filter({$0.name == "param1"}).first

print(param1?.value)

另外,您可以在URL上添加扩展名,以简化操作。

extension URL {

var queryParameters: QueryParameters { return QueryParameters(url: self) }

}

class QueryParameters {

let queryItems: [URLQueryItem]

init(url: URL?) {

queryItems = URLComponents(string: url?.absoluteString ?? "")?.queryItems ?? []

print(queryItems)

}

subscript(name: String) -> String? {

return queryItems.first(where: { $0.name == name })?.value

}

}

然后,您可以按名称访问参数。

let url = URL(string: "http://example.com?param1=value1&param2=param2")!

print(url.queryParameters["param1"])

我将创建一个字典,获得键/值对的数组

NSMutableDictionary *queryStringDictionary = [[NSMutableDictionary alloc] init];

NSArray *urlComponents = [urlString componentsSeparatedByString:@"&"];

然后填充字典:

for (NSString *keyValuePair in urlComponents)

{

NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];

NSString *key = [[pairComponents firstObject] stringByRemovingPercentEncoding];

NSString *value = [[pairComponents lastObject] stringByRemovingPercentEncoding];

[queryStringDictionary setObject:value forKey:key];

}

然后,您可以查询

[queryStringDictionary objectForKey:@"ad_eurl"];

这未经测试,您可能应该再进行一些错误测试。

以上是 解析URL字符串以获取键值的最佳方法? 的全部内容, 来源链接: utcz.com/qa/397712.html

回到顶部