iphone - 通过 URL 发送 JSON NSData

标签 iphone ios objective-c json cocoa

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

我正在通过构建一个 NSDictionary 并使用:

来序列化我的对象
return [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];

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

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

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

最佳答案

您需要执行额外的编码步骤,因为编码的 JSON 中的某些字符在作为 URL 的一部分时也具有重要意义。我们实际上想要做的是对数据进行URL 编码,这样生成的字符串中的任何字符都不会与应用程序期望的 URL 看起来像冲突。

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

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

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

我可以在这里重复代码,但由于已经完成了很多次,just view this blog这显示了如何将类别添加到 NSString 以进行适当的编码,之后您可以附加它并按其方式发送。使用 CFURLCreateStringByReplacingPercentEscapesUsingEncoding 编写类似的解码函数是对读者的一个练习,其中有许多例子随处可见。

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

关于iphone - 通过 URL 发送 JSON NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327441/

相关文章:

ios - 如何自定义 InAppSettingsKit(背景颜色和导航栏颜色)?

iphone - 如何在运行时确定二进制图像架构?

objective-c - 2个着色器使用相同的顶点数据

iphone - UITableViewCell 选择器 setSelected :animated: gets called many times?

ios - Frank 构建在 ld 命令上失败

objective-c - 自定义 View 中的 mouseDown 事件不显示正确的单击坐标

iphone - NSNotificationCenter 发送者平等标准

ios - 如何在 Objective c 中获取当前月份的日期?

ios - 如何在 UITesting swift 4 iOS 中获取 App 名称

iphone - iOS 应用程序打开时刷新 View