iOS url传递JSON格式参数方法

简介: iOS url传递JSON格式参数方法

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

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


1684473714262.png


数组里面嵌套了字典,格式比较复杂,无法直接拼接到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];
}


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

目录
相关文章
|
3月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
20天前
|
JavaScript
vue封装一个查询URL参数方法
通过以上步骤,我们在Vue.js项目中封装了一个查询URL参数的方法 `getQueryParam`,并在Vue组件中成功应用。这种封装方式不仅提高了代码的复用性,还使得代码更加清晰和易于维护。
10 1
|
21天前
|
JavaScript
vue封装一个查询URL参数方法
通过以上步骤,我们在Vue.js项目中封装了一个查询URL参数的方法 `getQueryParam`,并在Vue组件中成功应用。这种封装方式不仅提高了代码的复用性,还使得代码更加清晰和易于维护。
12 1
|
19天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
2月前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
296 4
|
2月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
77 1
|
3月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
187 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
3月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
5月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
89 5
|
4月前
|
JavaScript
js 获取并解析 url 中参数的三种方法
js 获取并解析 url 中参数的三种方法
433 0