Objective c 反序列化json流时出错

Objective c 反序列化json流时出错,objective-c,json,nsjsonserialization,nsinputstream,Objective C,Json,Nsjsonserialization,Nsinputstream,我有一个NSInputStream*inputStream从网络连接接收小JSON对象。如果我像这样将流读取到缓冲区: NSError *err = nil; uint8_t buffer[1024]; NSMutableData *data = [[NSMutableData alloc] init]; while ([inputStream hasBytesAvailable]) { int const len = [inputStream read:buffer maxLength

我有一个NSInputStream*inputStream从网络连接接收小JSON对象。如果我像这样将流读取到缓冲区:

NSError *err = nil;
uint8_t buffer[1024];
NSMutableData *data = [[NSMutableData alloc] init];
while ([inputStream hasBytesAvailable]) {
    int const len = [inputStream read:buffer maxLength:sizeof(buffer)];
    if (0 < len) {
        [data appendBytes:buffer length:len];
    }
}
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&err];

但是,通过使用调试器,我发现最后一行不会返回,并且不会记录错误!正确的方法是什么?

inputStream是否从网络连接读取?您永远不知道read:maxLength:读取了多少字节,因此,如果服务器正在发送JSON对象序列,您仍然需要一些分隔符。JSON对象可能是换行分隔的吗?@MartinR在网络上进行流式传输。格式良好的JSON是通过计算开/闭大括号对来进行自我定界的,所以换行符应该是不相关的。但据我所知,NSJSONSerialization没有方法只解析第一个JSON,并可能返回到下一个JSON开头的偏移量。我假设您必须手动查找范围。您可以尝试转换前1、2、3。。。字节,但这听起来不是很有效。在收到整个字符串之前,不要尝试解析JSON。如果您不介意简化网络代码,以便接收表示为NSData对象的JSON文本块,那么您从NSURLConnection in connection:didReceiveData:,您可以使用能够解析这些块的第三方JSON解析器:或。JPJson还可以在一个数据流中解析多个JSON文档。我是JPJson的作者,但jsonlite也非常优秀。
NSError *err = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithStream:inputStream options:0 error:&err];