我正在尝试解码从 Twitter 的 Streaming API 发送到我的应用程序的 json。
Twitter 将发送我的客户数据,其结构如下:
流式 API 响应的主体由一系列以换行符分隔的消息组成,其中“换行”被认为是 \r\n(十六进制,0x0D 0x0A),“消息”是 JSON 编码的数据结构或空行.
他们基本上用 \r\n 分隔推文。有时他们会向您发送一条推文,有时他们会一次向您发送许多推文。
解码“许多”案例对我来说是有问题的。我使用 iOS 内置的 NSJSONSerialization 类。问题是它读取了第一条推文,然后看到了 \r\n 并将其视为垃圾并返回一个空数组和伴随的错误。
为了解决这个问题,我使用以下代码基本上删除了换行符。
// json is the received json data
NSString* responseString = [[NSString alloc] initWithData:json encoding:NSASCIIStringEncoding];
NSMutableArray* responseMutableArray = [[responseString componentsSeparatedByString:@"\r\n"] mutableCopy];
[responseMutableArray removeLastObject];
NSArray* responseArray = [NSArray arrayWithArray:responseMutableArray];
[responseMutableArray removeAllObjects];
NSError* error;
for(NSString* tweetString in responseArray)
{
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:[tweetString dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingAllowFragments|NSJSONReadingMutableContainers error:&error];
[responseMutableArray addObject:dict];
}
//responseMutableArray contains the parsed tweets
方法是,将数据转换为 NSString,将 NSString 转换为数组(通过 \r\n 拆分),数组返回数据,然后将 JSON 解析为字典。这是一个混乱的过程,我想知道是否有更有效的方法可以做到这一点。
非常感谢
维生素B