通过URL发送一个JSON NSData



我试图在电子邮件链接中发送对象的JSON表示。收件人将打开链接,我的应用程序将通过url方案响应。它必须从url中提取JSON并重新构建对象。

我正在序列化我的对象通过构建一个NSDictionary和使用:

return [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];

我不知道接下来会发生什么。不知何故,我需要将此NSData转换为字符串,以便我可以前缀我的url方案并在链接中使用它。

在接收端,然后我需要删除前缀(我可以这样做)并将字符串转换回NSData

正确的方法是什么?我如何确保我的数据的内容不干扰JSON字符串编码(例如,如果我的对象包含包含特殊字符的文本)?

您需要执行一个额外的编码步骤,因为编码JSON中的一些字符在作为URL的一部分时也具有重要意义。我们实际想做的是对URL编码数据,使结果字符串中的字符与应用程序期望的URL看起来没有冲突。

第一步是将我们的数据转换为NSString(这基本上只是一个内存,因为NSStrings默认是用UTF-8编码的):

NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

现在,您可能想使用一个名为-stringByAddingPercentEscapesUsingEncoding的函数,但它没有完成转义所有相关字符的足够彻底的工作,因此我们需要构建自己的函数。

我可以在这里重复代码,但因为它已经做了很多次,只是查看这个博客,显示如何添加一个类别到NSString做适当的编码,之后你可以附加它,并发送它的方式。使用CFURLCreateStringByReplacingPercentEscapesUsingEncoding编写类似的解码函数对于读者来说是一个练习,其中可以找到许多示例。

确保您的有效负载非常小(大约几kB),因为url的长度可能有上限,即使是本地使用的和使用自定义方案的url也是如此。

最新更新