上一篇博客中是把URL轉換為字典,那么我們如何把URL請求中的參數封裝成字典,然后再封裝成數組呢?對OC中字符串操作熟練的小伙伴們應該覺得這是一個a+b的問題,沒錯把URL中的參數轉換為字典主要是對字符串的截取,關鍵是怎么個截法,才能把字符串中的參數列表分別轉換成鍵值對。下面是小菜自己的轉換思路,如果有更好的結局方法還請批評指正,相互學習交流一下,轉載請注明出處。
首先我們得會一個字符串拆分函數 componentsSeparatedByString:@"&",把字符串按照&進行拆分,然后返回字符串數組
輸入的數據的格式如下(裝有url的字符串數組):
1
2
3
4
5
|
(
"http://www.baidu.com?a=10&b=20"
,
"http://www.baidu.com?a=10&b=20&c=30"
,
"http://www.baidu.com?a=10&c=30"
)
|
接下來就是要把每個url中的參數列表轉換成字典,主要代碼如下:
代碼說明:
1.先把參數列表在url中的參數列表的起始位置獲取到,通過方法rangeOfString方法獲取
2.位置獲取到以后我們可以把參數列表從url字符串中提取出來,通過substringFromIndex來獲取。
3.通過componentsSeparatedByString把參數列表進行每項的拆分
4.通過componentsSeparatedByString把每項進行鍵值對的拆分
5.把鍵值對存入字典
5.把字典存入數組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
NSMutableArray * dataArray()
{
//用來作為函數的返回值,數組里里面可以存放每個url轉換的字典
NSMutableArray *arrayData = [NSMutableArray arrayWithCapacity:4];
//獲取數組,數組里裝得是url
NSMutableArray *arrayURL = appendURL();
NSLog(@
"獲取到得URL數組如下:\n%@"
, arrayURL);
//循環對數組中的每個url進行處理,把參數轉換為字典
for
(
int
i = 0; i < arrayURL.count; i ++)
{
NSLog(@
"第%d個URL的處理過程:%@"
, i+1, arrayURL[i]);
//獲取問號的位置,問號后是參數列表
NSRange range = [arrayURL[i] rangeOfString:@
"?"
];
NSLog(@
"參數列表開始的位置:%d"
, (
int
)range.location);
//獲取參數列表
NSString *propertys = [arrayURL[i] substringFromIndex:(
int
)(range.location+1)];
NSLog(@
"截取的參數列表:%@"
, propertys);
//進行字符串的拆分,通過&來拆分,把每個參數分開
NSArray *subArray = [propertys componentsSeparatedByString:@
"&"
];
NSLog(@
"把每個參數列表進行拆分,返回為數組:\n%@"
, subArray);
//把subArray轉換為字典
//tempDic中存放一個URL中轉換的鍵值對
NSMutableDictionary *tempDic = [NSMutableDictionary dictionaryWithCapacity:4];
for
(
int
j = 0 ; j < subArray.count; j++)
{
//在通過=拆分鍵和值
NSArray *dicArray = [subArray[j] componentsSeparatedByString:@
"="
];
NSLog(@
"再把每個參數通過=號進行拆分:\n%@"
, dicArray);
//給字典加入元素
[tempDic setObject:dicArray[1] forKey:dicArray[0]];
}
NSLog(@
"打印參數列表生成的字典:\n%@"
, tempDic);
[arrayData addObject:tempDic];
}
NSLog(@
"打印參數字典生成的數組:\n%@"
, arrayData);
return
arrayData;
}
|
上面代碼具體的執行步驟:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
2014-08-12 13:46:14.126 HelloOC[1195:303] 第1個URL的處理過程:http:
//www.baidu.com?a=10&b=20
2014-08-12 13:46:14.126 HelloOC[1195:303] 參數列表開始的位置:20
2014-08-12 13:46:14.126 HelloOC[1195:303] 截取的參數列表:a=10&b=20
2014-08-12 13:46:14.127 HelloOC[1195:303] 把每個參數列表進行拆分,返回為數組:
(
"a=10"
,
"b=20"
)
2014-08-12 13:46:14.127 HelloOC[1195:303] 再把每個參數通過=號進行拆分:
(
a,
10
)
2014-08-12 13:46:14.127 HelloOC[1195:303] 再把每個參數通過=號進行拆分:
(
b,
20
)
2014-08-12 13:46:14.128 HelloOC[1195:303] 打印參數列表生成的字典:
{
a = 10;
b = 20;
}
|