我正在为我正在编写的应用程序而苦苦挣扎。在应用程序方面,我有一个NSInputStream,它通过CFStreamCreatePairWithSocketToHost连接到服务器。
服务器正在以与应用程序异步的方式生成JSON对象。
在应用程序中,我对事件NSStreamEventHasBytesAvailable上的网络数据使用react。在某些网络上,我会在网络缓冲区中收到多个JSON对象。但是,我也要注意在一个网络缓冲区中没有收到整个JSON对象的情况。
我一直在寻找可以为我处理这些情况的JSON解析器,但一直找不到。 NSJSONSerialization无法很好地应对要传递的NSData中的多个JSON对象。我无法掌握如何在流上运行NSJSONSerialization的方法,并且不确定是否可以解决我的问题。
我已经研究了YAJL,但我只能使它工作不止一次。对于我所遇到的情况,我似乎找不到任何好的例子。
我感到沮丧和困惑,什么是最好的方法?在哪里可以找到一个好的榜样?欢迎任何建议!
最佳答案
有一个名为SBJson的库
这是一个示例(from here):
- (IBAction)go {
id block = ^(id item, BOOL *stop) {
dispatch_async(dispatch_get_main_queue(), ^{
// do something with item
});
};
id eh = ^(NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
// handle error
});
};
self.parser = [SBJson4Parser unwrapRootArrayParserWithBlock:block
errorHandler:errorHandler];
NSURLSessionConfiguration *c = [NSURLSessionConfiguration defaultSessionConfiguration]
NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:c
delegate:self
delegateQueue:nil];
NSURL *url = [NSURL URLWithString:self.urlField.text];
NSURLSessionDataTask *urlSessionDataTask = [urlSession dataTaskWithURL:url];
[urlSessionDataTask resume];
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data {
switch ([self.parser parse:data]) {
case SBJson4ParserError:
self.parser = nil;
break;
case SBJson4ParserComplete:
case SBJson4ParserStopped:
self.parser = nil;
break;
case SBJson4ParserWaitingForData:
break;
}
}
关于ios - 在iOS中解析连续JSON流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29440325/