我正在尝试在电子邮件链接中发送对象的JSON表示。收件人将打开链接,我的应用程序将通过网址方案回复。它必须从url中提取JSON并重新构建对象。
我通过构建NSDictionary
并使用:
return [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
我不确定接下来会发生什么。不知何故,我需要将此NSData
转换为字符串,以便我可以为我的url方案添加前缀并在链接中使用它。
在接收端,我需要删除前缀(我可以做)并将字符串转回NSData
。
这样做的正确方法是什么?如何确保我的数据内容不会干扰JSON字符串编码(例如,如果我的对象包含包含特殊字符的文本)?
答案 0 :(得分:1)
您需要执行额外的编码步骤,因为编码的JSON中的字符在作为URL的一部分时也具有重要性。我们实际想要做的是 URL-encode 数据,因此生成的字符串中的所有字符都不会与应用程序期望URL看起来相冲突。
第一步是将我们的数据转换为NSString
(这基本上只是一个memcpy,因为NSStrings
默认以UTF-8编码):
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
现在,有一个你可能想要使用的函数叫-stringByAddingPercentEscapesUsingEncoding
,但它没有做足够彻底的工作来逃避所有相关的角色,所以我们需要建立自己的。
我可以在这里重复代码,但由于它已经多次完成,just view this blog显示了如何向NSString
添加类别以进行正确的编码,之后您可以将其附加到发送它的方式。用CFURLCreateStringByReplacingPercentEscapesUsingEncoding
编写类似的解码函数是读者的练习,其中可以找到许多例子。
确保您的有效负载非常小(大约几KB),顺便说一句,因为URL可能是一个上限,即使是本地和自定义方案使用的URL也可以。