美文网首页iOS开发点滴APP & program
iOS url传递JSON格式参数方法

iOS url传递JSON格式参数方法

作者: anny_4243 | 来源:发表于2022-07-14 15:35 被阅读0次

    我们的项目里面有许多需要和h5交互的地方,开发时遇到这样一个需求,当第三方的开发人员提供h5地址的时候,要求对方可以通过在url后面拼接参数的方式把数据传递给我们。

    我们需要的数据格式是这样的:

    数组里面嵌套了字典,格式比较复杂,无法直接拼接到url后面,这时候就需要做一下处理了。

    假设我们需要的数据是这样的:

    dataArray =     (
                    {
                icon = "https://cdn2.jianshu.io/assets/default_avatar/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png";
                title = "\u7b80\u4e66";
                url = "https://www.jianshu.com/";
            },
                    {
                icon = "https://cdn2.jianshu.io/assets/default_avatar/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png";
                title = "\u7b80\u4e66";
                url = "https://www.jianshu.com/";
            },
                  {
                icon = "https://cdn2.jianshu.io/assets/default_avatar/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png";
                title = "\u7b80\u4e66";
                url = "https://www.jianshu.com/";
            }
        ); 
    

    首先我们需要将数据序列化,用到了NSJSONSerialization这个类,NSJSONSerialization既可以将JSON数据转化为Foundation对象,也可以将Foundation对象转化为JSON数据。现在我们需要将Foundation对象转化为JSON数据。

    代码如下:

    //data为上述我们需要的数据
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[data objectForKey:@"dataArray"] options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonStr = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
    

    通过以上两行代码我们就可以将我们需要的数据转换为JSON格式,得到了如下这样的数据:

    [
        {
          "title" : "简书",
          "icon" : "https:\/\/cdn2.jianshu.io\/assets\/default_avatar\/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png",
          "url" : "https:\/\/www.jianshu.com\/"
        },
        {
          "title" : "简书",
          "icon" : "https:\/\/cdn2.jianshu.io\/assets\/default_avatar\/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png",
          "url" : "https:\/\/www.jianshu.com\/"
        },
        {
          "title" : "简书",
          "icon" : "https:\/\/cdn2.jianshu.io\/assets\/default_avatar\/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png",
          "url" : "https:\/\/www.jianshu.com\/"
        }
     ]
    

    接下来我们要把这个JSON格式的数据拼接到URL后面,把获取到的JSON字符串进行encode,再拼接到我们原来的地址后面即可。假设我们原本的URL是https://www.jianshu.com/,我们需要的URL为https://www.jianshu.com?dataArray=encode后的JSON字符串,URL encode的方法我就不展开写了,网上有很多可以参考的方法,或者直接用这个工具(http://www.esjson.com/urlEncode.html)可以在线encode。

    最后得到的URL是这样的:
    https://www.jianshu.com?dataArray=%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22title%22%20%3A%20%22%E7%AE%80%E4%B9%A6%22%2C%0A%20%20%20%20%20%20%22icon%22%20%3A%20%22https%3A%5C%2F%5C%2Fcdn2.jianshu.io%5C%2Fassets%5C%2Fdefault_avatar%5C%2Favatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png%22%2C%0A%20%20%20%20%20%20%22url%22%20%3A%20%22https%3A%5C%2F%5C%2Fwww.jianshu.com%5C%2F%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22title%22%20%3A%20%22%E7%AE%80%E4%B9%A6%22%2C%0A%20%20%20%20%20%20%22icon%22%20%3A%20%22https%3A%5C%2F%5C%2Fcdn2.jianshu.io%5C%2Fassets%5C%2Fdefault_avatar%5C%2Favatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png%22%2C%0A%20%20%20%20%20%20%22url%22%20%3A%20%22https%3A%5C%2F%5C%2Fwww.jianshu.com%5C%2F%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22title%22%20%3A%20%22%E7%AE%80%E4%B9%A6%22%2C%0A%20%20%20%20%20%20%22icon%22%20%3A%20%22https%3A%5C%2F%5C%2Fcdn2.jianshu.io%5C%2Fassets%5C%2Fdefault_avatar%5C%2Favatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png%22%2C%0A%20%20%20%20%20%20%22url%22%20%3A%20%22https%3A%5C%2F%5C%2Fwww.jianshu.com%5C%2F%22%0A%20%20%20%20%7D%0A%20%5D

    以上为URL传递json格式参数的方法,接下来看一下给我们一个拼接了json格式参数的URL,我们怎么还原成iOS需要的数据格式。

    假设给了我们一个如上所示的URL:

    NSString *url = @"https://www.jianshu.com?dataArray=%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22title%22%20%3A%20%22%E7%AE%80%E4%B9%A6%22%2C%0A%20%20%20%20%20%20%22icon%22%20%3A%20%22https%3A%5C%2F%5C%2Fcdn2.jianshu.io%5C%2Fassets%5C%2Fdefault_avatar%5C%2Favatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png%22%2C%0A%20%20%20%20%20%20%22url%22%20%3A%20%22https%3A%5C%2F%5C%2Fwww.jianshu.com%5C%2F%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22title%22%20%3A%20%22%E7%AE%80%E4%B9%A6%22%2C%0A%20%20%20%20%20%20%22icon%22%20%3A%20%22https%3A%5C%2F%5C%2Fcdn2.jianshu.io%5C%2Fassets%5C%2Fdefault_avatar%5C%2Favatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png%22%2C%0A%20%20%20%20%20%20%22url%22%20%3A%20%22https%3A%5C%2F%5C%2Fwww.jianshu.com%5C%2F%22%0A%20%20%20%20%7D%2C%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22title%22%20%3A%20%22%E7%AE%80%E4%B9%A6%22%2C%0A%20%20%20%20%20%20%22icon%22%20%3A%20%22https%3A%5C%2F%5C%2Fcdn2.jianshu.io%5C%2Fassets%5C%2Fdefault_avatar%5C%2Favatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png%22%2C%0A%20%20%20%20%20%20%22url%22%20%3A%20%22https%3A%5C%2F%5C%2Fwww.jianshu.com%5C%2F%22%0A%20%20%20%20%7D%0A%20%5D";
    
    //获取参数名在URL中所在的位置
    NSRange startRange = [url rangeOfString:@"dataArray="];
    if ([url containString:@"dataArray"]) {
        //提取出我们需要数据的字符串之后进行解码,得到JSON格式的数据
        NSString *subStr = [[url substringFromIndex:startRange.location + startRange.length] jk_urlDecode];
        //将JSON格式的数据转换为我们需要的字典格式
        NSData *objectData = [subStr dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:nil];
    }
    

    最后得到的字典就是我们需要的数据。

    相关文章

      网友评论

        本文标题:iOS url传递JSON格式参数方法

        本文链接:https://www.haomeiwen.com/subject/irzxirtx.html