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=202014-08-12 13:46:14.126 HelloOC[1195:303] 参数列表开始的位置:202014-08-12 13:46:14.126 HelloOC[1195:303] 截取的参数列表:a=10&b=202014-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请求的参数转换为字典的更多相关文章
- Servlet中获取POST请求的参数
在servlet.filter等中获取POST请求的参数 form表单形式提交post方式,可以直接从 request 的 getParameterMap 方法中获取到参数 JSON形式提交post方 ...
- 如何从angular2中的url获取查询参数?
问题描述 我使用angular2.0.0-beta.7.当组件在像”/path?query=value1″这样的路径上加载时,它被重定向到”/path”.为什么删除了GET参数?如何保留参数? 路由器 ...
- RESTFUL风格的URL请求及参数接收
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义.RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源 ...
- Retrofit2.0+OkHttp打印Request URL(请求地址参数)
学习了Retrofit中的拦截器功能:实现日志中打印请求头内容 Retrofit 2+ 是基于OKHttp进行封装的,那么也就是说想进行请求拦截然后进行打印出来的话,就必须要从OkHttp进行入手. ...
- jmeter -- 在beanshell中拿到请求body参数和header参数
beanshell: import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.http.control ...
- urllib库中的URL编码解码和GETPOST请求
在urllib库的使用过程中,会在请求发送之前按照发送请求的方式进行编码处理,来使得传递的参数更加的安全,也更加符合模拟浏览器发送请求的形式.这就需要用urllib中的parse模块.parse的使用 ...
- 给Django中的url起名字
url反转 =>reverse 1.from django.shortcuts import reverse 2. 利用reverse函数对URL名称进行反转 reverse(url名称 ...
- 记录一次bug解决过程:velocity中获取url中的参数
一.总结 在Webx的Velocity中获取url中参数:$rundata.getRequest().getParameter('userId') 在Webx项目中,防止CSRF攻击(Cross-si ...
- URL地址中使用中文作为的参数【转】
原文:http://blog.csdn.net/blueheart20/article/details/43766713 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作 ...
随机推荐
- WEB前端工程师(实践)制作天气预报难度:简单
需要准备:jQuery Bootstrap 天气预报API(本文中使用API可能会失效请灵活运用) CSS样式可以你自己去写这里只提出jQuery 请求数据和解析JSON数据 { "resu ...
- Android6.0动态获取权限
Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...
- (转)详解css3弹性盒模型(Flexbox)
今天刚学了css3的弹性盒模型,这是一个可以让你告别浮动.完美实现垂直水平居中的新特性. Flexbox是布局模块,而不是一个简单的属性,它包含父元素和子元素的属性. Flexbox布局的主体思想是似 ...
- C#中分割字符串输出字符数组
来自博客园 http://www.cnblogs.com/yugen/archive/2010/08/18/1802781.html 1.用字符串分隔: using System.Text.Reg ...
- 使用JavaScript获取日期加随机数生成单号
今天学习Javascript,得到一个自动生成单号的JavaScript,留下日后备用: function getNowFormatDate() { var day = new Date(); var ...
- 用itextsharp打印pdf示例
学习了用itextsharp输出PDF文档,支持用XML定义文档,可定义多个数据源,简单的表达式,用于项目中效果还不错,其中PdfPageEvent类由包大人提供. 示例程序定义了一个简单的xml文件 ...
- C++类型转换函数
1.什么是类型转换函数 类型转换函数的作用是将一个类的对象转换成另一类型的数据. class testclass { private: int r; int m; public : testclass ...
- 《CLR.via.C#第三版》第二部分第13章节 接口 读书笔记(七)
这章的书写感觉很普通,是些基础的认知知识. 其中一点的重要认知,泛型接口的好处(其实也是使用泛型的好处之一):编译时类型安全&处理值类型时减少装箱. 再说点书上没有的.本来这些知识我打算另外分 ...
- ASP.NET MVC 路由(四)
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
- 激活jws.mono的图像处理
不得不说,jws.mono真的给我们带来了很大的便利,它免除了我们编译Linux.NET所带来的烦恼,节省了我们的时间.但是金无足赤人无完人,虽然jws.mono已经大致能够提供与我们自行编译相同的效 ...