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

简介:

        上一篇博客中是把URL转换为字典,那么我们如何把URL请求中的参数封装成字典,然后再封装成数组呢?对OC中字符串操作熟练的小伙伴们应该觉得这是一个a+b的问题,没错把URL中的参数转换为字典主要是对字符串的截取,关键是怎么个截法,才能把字符串中的参数列表分别转换成键值对。下面是小菜自己的转换思路,如果有更好的结局方法还请批评指正,相互学习交流一下,转载请注明出处。

        首先我们得会一个字符串拆分函数 componentsSeparatedByString:@"&",把字符串按照&进行拆分,然后返回字符串数组

    ​    ​输入的数据的格式如下(装有url的字符串数组):

(
    "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.把字典存入数组

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

 

    ​    ​上面代码具体的执行步骤:

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

相关文章
|
3月前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
56 0
|
5月前
|
缓存 网络协议 Java
(六)网络编程之化身一个请求感受浏览器输入URL后奇妙的网络之旅!
在浏览器上输入一个URL后发生了什么? 这也是面试中老生常谈的话题,包括网上也有大量关于这块的内容。
140 2
|
4月前
|
数据采集 人工智能 监控
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
|
5月前
|
缓存 安全 Web App开发
Chrome插件实现问题之网络进程接收到URL请求后会如何解决
Chrome插件实现问题之网络进程接收到URL请求后会如何解决
|
4月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
4月前
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
48 0
|
6月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
95 5
|
5月前
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
263 0
|
5月前
|
JavaScript
js 获取并解析 url 中参数的三种方法
js 获取并解析 url 中参数的三种方法
483 0
|
6月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之在调用接口传入的图片URL参数,文件在本地或者非上海地域OSS链接,该怎么办
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。