Objective-C中把URL請求的參數轉換為字典


        上一篇博客中是把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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM