Objective-C中把URL请求的参数转换为字典

原博客:http://www.cnblogs.com/ludashi/p/3907125.html

如何把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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值