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;

}

时间: 2024-08-02 06:58:51

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

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

问题描述 我使用angular2.0.0-beta.7.当组件在像”/path?query=value1″这样的路径上加载时,它被重定向到”/path”.为什么删除了GET参数?如何保留参数? 路由器出现错误.如果我有一条主路线 @RouteConfig([ { path: '/todos/...', name: 'TodoMain', component: TodoMainComponent } ]) 和我的孩子路线一样 @RouteConfig([ { path: '/', componen

ajax 中关于URL路径及参数特殊字符问题

最近在做项目时,ajax参数中出现了特殊字符(#)导致路径出现截断问题,去度娘找了下答案,找到了解决办法,在js中有个:escape() 函数 看下函数介绍 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 例子 <script type="text/javascript"> document.write(escape("Visit W3School!") + "<br />") docu

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

学习了Retrofit中的拦截器功能:实现日志中打印请求头内容 Retrofit 2+ 是基于OKHttp进行封装的,那么也就是说想进行请求拦截然后进行打印出来的话,就必须要从OkHttp进行入手. 1,添加依赖包: compile 'com.squareup.okhttp3:logging-interceptor:3.1.2' 2,我这里是新建了一个方法进行创建并获取OkHttp private OkHttpClient getOkHttpClient() { //日志显示级别 HttpLog

给Django中的url起名字

url反转  =>reverse 1.from django.shortcuts  import  reverse 2. 利用reverse函数对URL名称进行反转  reverse(url名称) 3.反转之后的内容就是我们需要的路由 如果我们反转的url请求需要参数的话  那么url的这个参数应该是以字典的形式传递给 reverse函数    例如 path(''book/book_detail/<book_id>,views.book_detail,name=''book_detai

获取URL中附带的请求参数的方式

在进行请求的时候,通常的方式是:request.getParametere("param");来获得我们想要的一些参数, 但是在现实的生活中我们需要自定义一些URL格式的请求参数,对这些格式的请求参数可能通过request.getParameter("param") 就不是十分的合适. 下面我们以http://www.yongit.com/device/md5/44CF9590006BF252F707?firstParam=gHdg5pU48rHTDknJ&

web过滤器中获取请求的参数(content-type:multipart/form-data)

1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; 这种方法有缺陷:它只能获取  POST 提交方式中的Content-Type: application/x-www-form-urlencoded; HttpServletRequest request= (HttpServletRequest) req; String param = reque

JS-获取URL请求参数

前言:原来做过一个项目,需要实现一个页面打印的功能,由于项目中使用了AngularJS+Bootstrap等前端框架,需要打印的页面又在弹出框中,使用了Bootstrap的模态框后发现打印的效果不太好,后来就使用原生的方式弹出一个新的窗口,不过新的窗口中的某些数据又需要从前一个页面中获取,使用AngularJS框架后发现从后台返回的页面总是被封装成一个对象,压根展现不了,怎么办?下面的这个小方法就是用于解决这个问题的——页面间跳转,在需要传递的参数不多的情况下,使用URL路径来传递参数.代码比较

Jquery中Ajax异步请求中的async参数的作用

之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" onmouseover="testAsync()"> asy.js function testAsync{ var temp;     $.ajax({         async: false,         type : "GET",         url :

Jave代码中生成url http请求

public static String sendPost(String url, String param)throws Exception { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); conn.