解析NSStrings以确保在XCode中正确形成JSON字符串

Mag*_*ave 5 iphone json fbconnect

我正在从PLIST读取字符串数据,我正在使用它创建一个JSON字符串(顺便在Facebook Connect中使用).

NSString *eventLink = [eventDictionary objectForKey:EVENT_FIND_OUT_MORE_KEY];
NSString *eventLinkEscaped = [eventLink stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *eventName = [eventDictionary objectForKey:EVENT_NAME_KEY];
NSString *eventDescription = [eventDictionary objectForKey:@"Description"];
NSString *eventImageAddress = [eventDictionary valueForKey:@"Image URL"];
if ([eventImageAddress length] == 0)
{
    eventImageAddress = NO_EVENT_IMAGE_URL;
}
// Publish a story to the feed using the feed dialog
FBStreamDialog *facebookStreamDialog = [[[FBStreamDialog alloc] init] autorelease];
    facebookStreamDialog.delegate = self;
    facebookStreamDialog.userMessagePrompt = @"Publish to Facebook";
    facebookStreamDialog.attachment =[NSString stringWithFormat: @"{\"name\":\"%@\",\"href\":\"%@\",\"description\":\"%@\",\"media\":[{\"type\":\"image\",\"src\":\"%@\",\"href\":\"%@\"}]}", eventName, eventLinkEscaped, eventDescription, eventImageAddress, eventLinkEscaped];
[facebookStreamDialog show];
Run Code Online (Sandbox Code Playgroud)

所有这些都很有效,但是对话框中显示的某些事件描述(大约150个中的4个)是空白的.我找到了明显的候选者,即描述包含"例如字符或版权符号.我的问题是,是否有一个简单的方法调用,例如stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding,它将确保任何狡猾的字符被转义或忽略?

提前致谢,

戴夫

Bri*_*dos 2

我认为没有一种简单的方法可以逃避问题字符串。如果您在代码中的其他位置需要 JSON 支持,请考虑使用现有的 JSON 解析/生成器框架之一,例如yajl-objcSBJSON。其中任何一个都可以让您将响应构建为 Foundation 对象 (NSArray/NSDictionary),然后调用单个方法来生成适当的 JSON。您的代码将更加简洁,并且您可以受益于这两个框架都经过了良好的测试。

如果只需要生成这一点 JSON,那么最好的选择可能是手动遍历输入字符串,用适当的转义版本替换潜在的问题字符。情况并不像您想象的那么糟糕。查看SBJsonWriter的源码