0

問題を再現するには、次の手順を実行してください

NSString *url = @"http://qdreams.com/laura/index.php?request=EventWeekListings&year=2012&month=10&day=22";

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@" , json);
NSDictionary *deserializedData = [json objectFromJSONString];

deserializedDataにはnil が含まれます。期待される動作は、適切な辞書を返すことです。

JSONディクショナリ要素の総数が一定の閾値を超えたからでしょうか?

この件で何か助けていただければ幸いです。

4

2 に答える 2

0

NSJSONSerialization メソッド JSONObjectWithData:options:error: を使用しないのはなぜですか。私にとってはうまくいきました。

    NSString *url = @"http://qdreams.com/laura/index.php?request=EventWeekListings&year=2012&month=10&day=22";
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
    NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"%@",arr);

編集後: 今朝もう一度コードを実行したところ、あなたと同じように null になりました。dataWithContentsOfURL の問題。つまり、何かがうまくいかなかった場合に何が起こったのかを制御できず、知る方法がないということです。そこで、以下のコードで再テストしました。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [self loadData];
}

-(void) loadData {

    NSLog(@"loadData...");
    self.receivedData = [[NSMutableData alloc] init];
    NSURL *url = [NSURL URLWithString:@"http://qdreams.com/laura/index.php?request=EventWeekListings&year=2012&month=10&day=22"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10.0];
    [NSURLConnection connectionWithRequest:request delegate:self];

}


-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"didReceiveResponse...");
    [self.receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"didReceiveData...");
    NSLog(@"Succeeded! Received %ld bytes of data",[data length]);
    [self.receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"didFailWithError...");
    NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
    //lblError.text = [NSString stringWithFormat:@"Connection failed! Error - %@",[error localizedDescription]];
    self.receivedData = nil;
}


-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"connectionDidFinishLoading...");
    NSError *error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:self.receivedData options:kNilOptions error:&error];
    if (error) {
        NSLog(@"%@",error.localizedDescription);
        NSLog(@"%@",[[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding]);
    }else{
        NSLog(@"Finished...Download/Parsing successful");
        if ([result isKindOfClass:[NSArray class]]) 
            NSLog(@"%@",result);
    }
}

エラーが発生し、error.localizesDescription のログに「データが壊れているため読み取れませんでした」とありました。そのため、JSON パーサーが正しく機能するのを妨げる、サーバーから返されたものに何か問題があるようです。エラーメッセージとともに文字列も出力しました。データを注意深く見て、データの何が問題なのかを突き止めることができるかもしれません。

于 2012-10-22T06:31:12.950 に答える
0

あなたのjsonを見ると、名前なしで(角括弧を使用して)配列値から始めます。次のような方法で応答を再フォーマットしてみてください。

 {"results":[...the rest of your response..]}
于 2012-10-22T16:26:02.030 に答える