• 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数组如下: %@", 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(@"把每个参数列表进行拆分,返回为数组: %@", subArray);
             
            //把subArray转换为字典
            //tempDic中存放一个URL中转换的键值对
            NSMutableDictionary *tempDic = [NSMutableDictionary dictionaryWithCapacity:4];
             
            for (int j = 0 ; j < subArray.count; j++)
            {
                //在通过=拆分键和值
                NSArray *dicArray = [subArray[j] componentsSeparatedByString:@"="];
                NSLog(@"再把每个参数通过=号进行拆分: %@", dicArray);
                //给字典加入元素
                [tempDic setObject:dicArray[1] forKey:dicArray[0]];
            }
            NSLog(@"打印参数列表生成的字典: %@", tempDic);
            [arrayData addObject:tempDic];
        }
        NSLog(@"打印参数字典生成的数组: %@", 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;
    }
  • 相关阅读:
    安卓adb
    图数据库学习
    分布式架构演进
    多活架构
    异地多活
    分布式CRDT
    技术架构的战略和战术原则
    分布式金融架构课笔记
    使用jackson进行json序列化时进行敏感字段脱敏(加密)或者忽略
    读书笔记《演进式架构》
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6659447.html
Copyright © 2020-2023  润新知