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;
}
时间: 2024-10-24 05:19:00

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

使用volley进行post请求,参数中无故多出&amp;amp;amp;

问题描述 使用volley进行post请求,参数中无故多出& 使用volley进行post请求,C#在接收到的时候参数中多了个&,源码如下: RequestQueue requestQueue = Volley.newRequestQueue(this); StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Overr

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

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

java解析出url请求的路径和参数键值对类(解析出url请求的路径,包括页面)_JSP编程

复制代码 代码如下: package RequestPackage; import java.util.HashMap; import java.util.Map; public class CRequest { /** * 解析出url请求的路径,包括页面 * @param strURL url地址 * @return url路径 */ public static String UrlPage(String strURL) { String strPage=null; String[] arr

请求-在java或html中打开url

问题描述 在java或html中打开url 我希望在java或者html中打开一个第三方新的链接,比如说window.location.href=""http://www.baidu.com""一个get请求我现在希望在这个get请求中放入cookie请问如何弄,不要java的模拟请求,希望可以确确实实的在浏览器看到那个页面.请问怎么弄.谢谢啊. 解决方案 先设置cookiedocument.cookie=""userId=828"&q

JAVA中URL链接中文参数乱码处理方法

IE缺省对URL后面的参数是不编码发送的,但是tomat缺省是按ISO8859-1来进行URL编码的,因此才会出错. 方法一 http://xxx.do?ptname=中文参数 String strPtname = request.getParameter("ptname"); strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8");    方法二 <%@ page

servlet-response.setHeader中url怎么传递参数

问题描述 response.setHeader中url怎么传递参数 response.setHeader(""Refresh""3url=/db_project/index/index.jsp?username=<%=name%>"");name是我从servlet获取到的参数,没有问题,但是这样写jsp报错为什么jsp会报错 解决方案 你把报的错误信息贴出来 解决方案二: 在myeclipse中编译都不通过 解决方案三: org.a

如何在iframe中的url传一个openid的参数过去

问题描述 <iframesrc="http://www.ledsiaocha.com/ms/ss/objgeb"frameborder="0"width="100%"height="100%"></iframe>如何在iframe中的url传一个openid的参数过去 解决方案

asp如何获取url请求后返回的参数

问题描述 asp如何获取url请求后返回的参数 请求一个url,然后请求成功后会返回一些参数,我该如何获取这个参数? string HZurl = "http://" + strDxIP + "/gwsp_web_interface/jsp/third/getReportByGwpp.jsp?userId=crm&pwd=a66abb5684c45962d887564f08346e8d"; 请求这个地址,请求成功后,会返回一个id.我该如何获取这个id:

减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)

原文:减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术) 在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 "利用将小图标合成一张背景图来减少HTTP请求",那么,这一篇博文将讲解  " 将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片". 一.为何选择将图片转成二进制并生成Base64编