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; }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一“技”之长

iOS运行时函数替换框架——RSSwizzle

        Objective-C是的运行时特性在iOS开发中应用广泛,通过runtime方法,开发者可以在运行时动态为类添加方法,修改类的方法,系统的cl...

17930
来自专栏程序员Gank

《Objective-C-高级编程》干货三部曲(一):引用计数篇

总结了Effective Objective-C之后,还想读一本进阶的iOS书,毫不犹豫选中了《Objective-C 高级编程》:

21240
来自专栏ml

C plus plus 控制格式

使用这些格式需要声明包含<iomainip> long flags( ) const 返回当前的格式标志。 long flays(long newflag) 设...

22340
来自专栏算法修养

CodeForeces 665C Simple Strings

C. Simple Strings time limit per test 2 seconds memory limit per test 256 ...

33830
来自专栏Jacklin攻城狮

Objective-C Runtime:深入理解成员变量与属性

在上篇文章Objective-C Runtime:深入理解类与对象中,讲解了类与对象的相关内容。

13530
来自专栏小二的折腾日记

LeetCode-56and57-Merge-Intervals

如例子中所示,每个数组的前后分别表示开始和结束,工作是合并有重叠的数组。例如,由于[1,3]和[2,6]有重叠,故直接改为[1,6]后输出。 想法还是比较简单的...

8020
来自专栏偏前端工程师的驿站

JS魔法堂:再次认识Function.prototype.call

一、前言                                                                大家先预计一下以下四个函...

277100
来自专栏xx_Cc的学习总结专栏

iOS-RunTime,不再只是听说

31570
来自专栏技术总结

《Objective-C高级编程》温故知新之"自动引用计数"

1、使用alloc、new、copy、mutableCopy的意味着自己生成的对象只有自己持有

13950
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - 探寻Runtime本质(四)

首先来看一道面试题。 下列代码中Person继承自NSObject,Student继承自Person,写出下列代码输出内容。

25040

扫码关注云+社区

领取腾讯云代金券