Parsing the URL query string into an NSDictionary using Objective C
In IOS, we want to parsing the URL query string into NSDictionary
. It is convenient for us to read.
Example
Extract the query string from the url. It starts with ?
char and ends with the anchor, the part that starts with #
. The Query string are separated into key-value pairs by &
.
- (NSMutableDictionary *)parseUrlQuery2Diction:(NSString *)url {
NSMutableDictionary *queryStringDictionary = [[NSMutableDictionary alloc] init];
NSRange range = [url rangeOfString:@"?"];
if (range.location == NSNotFound) {
return queryStringDictionary;
}
url = [url substringFromIndex:(range.location + 1)];
range = [url rangeOfString:@"#"];
if (range.location != NSNotFound) {
url = [url substringToIndex:(range.location)];
}
NSArray *urlComponents = [url componentsSeparatedByString:@"&"];
for (NSString *keyValuePair in urlComponents)
{
NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];
NSString *key = [[pairComponents firstObject] stringByRemovingPercentEncoding];
NSString *value = [[pairComponents lastObject] stringByRemovingPercentEncoding];
if ([key length] == 0) {
continue;
}
[queryStringDictionary setObject:value forKey:key];
}
return queryStringDictionary;
}
Use it
NSString *url1 = @"https://localhost:8080/test";
NSDictionary * params1 = [self parseUrlQuery2Diction:url1];
NSLog(@"params1: %@", params1);
NSString *url2 = @"https://localhost:8080/test?a=1&b=2";
NSDictionary * params2 = [self parseUrlQuery2Diction:url2];
NSLog(@"params2: %@", params2);
NSString *url3 = @"https://localhost:8080/test?c=3&d=4#xyz";
NSDictionary * params3 = [self parseUrlQuery2Diction:url3];
NSLog(@"params3: %@", params3);
Run and get the following result.
params1: {
}
params2: {
a = 1;
b = 2;
}
params3: {
c = 3;
d = 4;
}