这是我解析json服务的代码。但是我在json字典中得到了nil值。但是,当我复制json响应并制作一个.txt文件并进行解析时。它运作良好。
奇怪的问题。

-(void)viewDidLoad
{
    [super viewDidLoad];

    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:@"http://www.checker.co.il/testing/c_pda-load_reports_list.php?app=1"];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
    });
}

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                         options:kNilOptions
                                                           error:&error];
}


我正在得到这种回应。

{"204281":{"rpID":"204281","ReportTitle":"Main Performance
Analysis","ReportOrder":"2","URL":"report-network-status.php?ClientID=106&BranchID=&SetID=&
PropID=&props=&reportDateArng=3&hdrf_chosenCycleExtent=7&rangeStartd=0&rangeStartm=0&
rangeStarty=0&rangeEndd=0&rangeEndm=0&rangeEndy=0&pastDateCyclesNumber=2&selectedCycleExtent=&
showClientColorGroup=1&displayType=3&DyChartType=Bar2D&DycX=400&DycY=350&isPopup=0&
callingReportPageName=report-network-status.php&ReportTitle=\"%20
\"","ReportCategory":"Performance","CategoryRow":"0","CategoryCol":"4"},"204282":
{"rpID":"204282","ReportTitle":"Performance According to
Ownership","ReportOrder":"5","URL":"report-property.php?ClientID=106&SetID=&PropID=78&
PropForFiltering=&props=&WorkerID=0&watchedReviews=&reportDateArng=1&hdrf_chosenCycleExtent=&
rangeStartd=0&rangeStartm=0&rangeStarty=0&rangeEndd=0&rangeEndm=0&rangeEndy=0&
pastDateCyclesNumber=2&selectedCycleExtent=&displayType=3&DyChartType=Column2D&DycX=400&DycY=250&
callingReportPageName=report-property.php&js_refresh=0&js_submit=0&
isPopup=0","ReportCategory":"Performance","CategoryRow":"0","CategoryCol":"4"}}


提前致谢。 :)

最佳答案

dthien是正确的,您需要使用NSURL
danh是对的,您应该看看错误。您可以查看error.localizedDescription,但这并不总是有用的。您可能会得到error.code 3840,并且如果查看error.userInfo字典,则可能会看到一条描述,内容为“ JSON文本不是以数组或对象开头,并且允许未设置片段的选项”。
每当您收到响应JSONObjectWithData的错误时,都应该查看数据。因此,在JSONObjectWithData之前,请执行以下操作:

NSLog(@"%@", [[NSString alloc] initWithData:responseData
                                   encoding:NSUTF8StringEncoding]);

这样做时,您可能会注意到数据不包含JSON字符串。您可能会遇到身份验证问题,并且可能要使用NSURLConnection而不是仅使用dataWithContentsOfURL,因为前者可以使您对连接进行更详细的控制。正确的后续步骤取决于身份验证问题的性质。身份验证有两种基本类型:


质询响应身份验证:如果您具有这种身份验证,并且在Web浏览器中提取了JSON URL,则会出现一些弹出窗口,询问用户凭据。以编程方式,如果您编写了didReceiveAuthenticationChallenge,则会看到它将被调用。无论如何,如果这是您的身份验证类型,请参见《 URL加载系统编程指南》中的Authentication Challenges
基于HTML的身份验证:如果(a)您的响应是HTML登录页面,则可以确定是否是这种情况;或(b)如果您的willSendRequest方法在请求重定向到登录页面时被调用。在这种情况下,对此的正确处理在一定程度上取决于服务器程序员如何处理身份验证问题以及您要如何处理它(例如,是否要向用户显示身份验证页面?使用一些先前建立的凭证?等。


如果查看该responseData的内容,该问题将很明显。如果您获得类似于HTML登录页面的内容,则可能是在处理后者。

关于iphone - Json解析问题,但是当我将响应复制到txt文件中时工作正常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14886653/

10-14 20:40
查看更多