1

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

我通过构建NSDictionary和使用来序列化我的对象:

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

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

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

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

4

1 回答 1

1

您需要执行额外的编码步骤,因为编码的 JSON 中的某些字符在它们是 URL 的一部分时也很重要。我们真正想做的是对数据进行 URL 编码,这样生成的字符串中的字符都不会与应用程序期望 URL 的样子发生冲突。

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

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

现在,您可能会想使用一个名为的函数-stringByAddingPercentEscapesUsingEncoding,但它在转义所有相关字符方面做得不够彻底,因此我们需要构建自己的。

我可以在这里重复代码,但由于它已经完成了很多次,只需查看这个博客,它展示了如何添加一个类别来NSString进行正确的编码,之后你可以附加它并发送它。编写类似的解码函数CFURLCreateStringByReplacingPercentEscapesUsingEncoding对读者来说是一个练习,可以在其中找到许多示例。

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

于 2013-01-14T22:09:53.633 回答