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

Objective-C中把URL请求的参数转换为字典的更多相关文章

  1. Servlet中获取POST请求的参数

    在servlet.filter等中获取POST请求的参数 form表单形式提交post方式,可以直接从 request 的 getParameterMap 方法中获取到参数 JSON形式提交post方 ...

  2. 如何从angular2中的url获取查询参数?

    问题描述 我使用angular2.0.0-beta.7.当组件在像”/path?query=value1″这样的路径上加载时,它被重定向到”/path”.为什么删除了GET参数?如何保留参数? 路由器 ...

  3. RESTFUL风格的URL请求及参数接收

    RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义.RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源 ...

  4. Retrofit2.0+OkHttp打印Request URL(请求地址参数)

    学习了Retrofit中的拦截器功能:实现日志中打印请求头内容 Retrofit 2+ 是基于OKHttp进行封装的,那么也就是说想进行请求拦截然后进行打印出来的话,就必须要从OkHttp进行入手. ...

  5. jmeter -- 在beanshell中拿到请求body参数和header参数

    beanshell: import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.http.control ...

  6. urllib库中的URL编码解码和GETPOST请求

    在urllib库的使用过程中,会在请求发送之前按照发送请求的方式进行编码处理,来使得传递的参数更加的安全,也更加符合模拟浏览器发送请求的形式.这就需要用urllib中的parse模块.parse的使用 ...

  7. 给Django中的url起名字

    url反转  =>reverse 1.from django.shortcuts  import  reverse 2. 利用reverse函数对URL名称进行反转  reverse(url名称 ...

  8. 记录一次bug解决过程:velocity中获取url中的参数

    一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...

  9. URL地址中使用中文作为的参数【转】

    原文:http://blog.csdn.net/blueheart20/article/details/43766713 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作 ...

随机推荐

  1. 二、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)

    2.收信息来到表单提交时URL所指向的servlet文件,获取传递过来的参数值

  2. C#委托与事件初探

    最近刚刚接触C#,学到事件与委托部分无法理解,于是上网查阅了各种资料,终于明白了一些,在此进行总结. 一.C语言中的函数指针 想要理解什么是委托,就要先理解函数指针的概念.所谓函数指针,就是指向函数的 ...

  3. call,apply学习小结

    之前一直不太清楚js的call,apply的作用是什么,直到看到了这篇博文 http://blog.csdn.net/myhahaxiao/article/details/6952321 functi ...

  4. 输出日志实例改成用Spring的AOP来实现

    1.采用Interception Around通知的形式实现 Interception Around通知会在Join Point的前后执行,实现Interception Around通知的类需要实现接 ...

  5. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

  6. DOM2级提供的对DOM结构执行深度优先遍历 笔记

    NodeIterator和TreeWalker这2个类型可以基于给定的起点对DOM结构执行深度优先遍历.(我测试用的浏览器是Chrome,介绍说IE不支持DOM遍历,但是不知道最新的IE支持不支持) ...

  7. Shell下突破安全狗远程桌面守护

    首先在Shell下把安全狗的安装配置给下来 默认安装路径: C:\Program Files\SafedogServer\SafeDogGuardCenter  找到 ProGuardData.ini ...

  8. android 之httpclient方式提交数据

    HttpClient: 今天实战下httpclient请求网络json数据,解析json数据返回信息,显示在textview, 起因:学校查询饭卡余额,每次都要访问校园网(内网),才可以查询,然后才是 ...

  9. 常用的一些复杂SQL语句

    1.根据表中的birthday统计年龄段人数: //以下代码表示查询出来后的结果集添加一列字段 cast('20以下' as char) as age SELECT COUNT((DATE_FORMA ...

  10. PHP基础知识之魔术方法

    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sle ...