ios – 将JSON NSData转换为NSDictionary

我正在使用Web服务的API服务,并且在他们的描述中写道,他们发送的 JSON数据在我看来也与我从中获得的响应相匹配.
这是我从NSURLConnection-Delegate(连接didReceiveData:(NSData *)数据)获得的一部分,并使用以下命令在Nsstring中转换:
NSLog(@"response: %@",[[Nsstring alloc] initWithData:data encoding:NSUTF8StringEncoding]);

这里的片段:

{"scans": 
{
    "Engine1“: 
    {
        "detected": false,"version": "1.3.0.4959","result": null,"update": "20140521"
    },"Engine2“: 
    {
        "detected": false,"version": "12.0.250.0",...
    },"Engine13": 
    {
         "detected": false,"version": "9.178.12155","result":

在NSLog-String中它停在那里.现在我想知道你错了,我不能用这行代码将这些数据转换为JSON字典:

NSError* error;
    NSMutableDictionary *dJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingallowFragments error:&error];

我尝试了一些选项,但总是出现同样的错误

Error Domain=NSCocoaErrorDomain Code=3840 "The operation Couldn’t be completed. (Cocoa error 3840.)" 
(Unexpected end of file while parsing object.) UserInfo=0x109260850 {NSDebugDescription=Unexpected end of file while parsing object.}

一切都表明JSON数据包不完整但我不知道如何检查它或如何查找应该位于我的代码中的问题.

解决方法

你是否实现了NSURLConnectionDelagate的所有委托方法.看起来你正在从“ – (void)connection:(NSURLConnection *)连接didReceiveData:(NSData *)data”delagate方法获取转换数据.如果是这样,您可能会得到不完整的数据并且无法转换.

试试这个:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    // A response has been received,this is where we initialize the instance var you created
    // so that we can append data to it in the didReceiveData method
    // Furthermore,this method is called each time there is a redirect so reinitializing it
    // also serves to clear it
    lookServerResponseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to the instance variable you declared
    [lookServerResponseData appendData:data];
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // The request is complete and data has been received
    // You can parse the stuff in your instance variable Now
    NSError *errorjson=nil;
    NSDictionary* responseDict = [NSJSONSerialization JSONObjectWithData:lookServerResponseData options:kNilOptions error:&errorjson];

     NSLog(@"responseDict=%@",responseDict);

    [lookServerResponseData release];
    lookServerResponseData = nil;
}

这里,lookServerResponseData是全局声明的NSMutableData的实例.

希望它会有所帮助.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...