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


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

目录
相关文章
|
8月前
|
JSON 中间件 Java
【GoGin】(3)Gin的数据渲染和中间件的使用:数据渲染、返回JSON、浅.JSON()源码、中间件、Next()方法
我们在正常注册中间件时,会打断原有的运行流程,但是你可以在中间件函数内部添加Next()方法,这样可以让原有的运行流程继续执行,当原有的运行流程结束后再回来执行中间件内部的内容。​ c.Writer.WriteHeaderNow()还会写入文本流中。可以看到使用next后,正常执行流程中并没有获得到中间件设置的值。接口还提供了一个可以修改ContentType的方法。判断了传入的状态码是否符合正确的状态码,并返回。在内部封装时,只是标注了不同的render类型。再看一下其他返回的类型;
377 3
|
12月前
|
JSON 前端开发 应用服务中间件
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据的方案
最后,记得在任何生产环境部署之前,进行透彻测试以确保一切运转如预期。遵循这些战术,守卫你的网络城堡不再是难题。
456 3
|
JSON 人工智能 算法
探索大型语言模型LLM推理全阶段的JSON格式输出限制方法
本篇文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
2337 48
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
604 3
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
iOS开发
获取iOS应用的URL Schemes
获取iOS应用的URL Schemes
639 0
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
971 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决