JSON解析在iPhone应用程序中给出异常

时间:2011-08-25 11:07:33

标签: iphone objective-c

我正在使用以下代码来处理其工作的其他JSON数据,但在这里它给出了字典异常,它有少量数据。

这是我正在解析的数据

   { "affectedDate": 1310515200000, 
   "category": "Sport", 
   "content": "Kl 2100 hver tredje lørdag i måneden arrangerer Harvey's en interaktiv  fotballquiz på våre 13 HD-skjermer. Nivået er høyt, men samtidig er det underholdning i form av videoproduksjoner og midt i blinken for enhver fotballinteressert kristiansander. Quizen er myntet på folk som har lyst å lære litt om fotball - og ikke bare de som vet hvor mange fly som gjennomsnittlig flyr over Goodison Park. Det er 1-4 personer pr lag og gratis påmelding i baren på Harvey's eller på tlf 380 72305. Umbro er hovedsponsor av Harvey's Saturday Night Football Quiz og stiller med flotte rundepremier! \n

\ n Vi harogsåenmaratontabellbeståendeavalle resultatene fra 2011s runder,men hvor vi stryker hvert lag sinefiredårligstepoengsummerforan finalen i desember。 Laget som vinner sammenlagt sender vi til EM i Polen og Ukraina neste sommer!\ n \ n Utvalgte deler av tidligere quizer,soundtrack,maratontabell og annen informasjon finner duforøvrigpåvårehjemmesiderwww.harveys.no \ n \ n 来自dette erenmånedligfootballhappeningåfåmedseg的Vi garanterer!“,           “eventId”:15946,“image”:“http://shelf-media.s3.amazonaws.com/39be3cbc5584eb0e9f61c9926a62d478_gmedium.jpg”,

   "latitude": "58.1441382", 
  "longitude": "7.9933589", 
  "title": "HARVEY'S SATURDAY NIGHT FOOTBALL QUIZ" } 



SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.krsconnect.no/community/api.html?method=event&appid=620&eventid=15946&affecteddate=1310515200000"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];
appDelegate.books1 = [[NSMutableArray alloc] init];
appDelegate.dates =[[NSMutableArray alloc]init];
appDelegate.descriptionArray=[[NSMutableArray alloc]init];
NSArray *results = [parser objectWithString:json_string error:nil];
NSLog(@"%@", results);

for (int i=0; i<[results count]; i++) {
  Detail  *aBook = [[Detail alloc] initWithDictionary:[results objectAtIndex:i]];      
  [appDelegate.descriptionArray addObject:aBook];
  [aBook release];  
}

3 个答案:

答案 0 :(得分:1)

当我查看实际网页时,最外层的结构是“对象”(字典)。但是你解析输入字符串两次,一次期望一个字典,第二次解析一个数组(它不能同时解析)。我怀疑,当你收到错误时,它就是你正在访问的数组。 (由于您未提供任何日志或其他错误信息,因此无法确定。)

通常,您需要测试(使用isKindOfClass)从JSON解析器返回的类型,以确保它是您期望的类型。

答案 1 :(得分:0)

    Detail  *aBook = [[Detail alloc] initWithDictionary:[results objectAtIndex:i]];

您假设results数组中的所有对象都是NSDictionary个对象 - JSON可以包含两个字典和数组,所以这远远不能保证。

答案 2 :(得分:0)

您的JSON字符串包含字典作为其根对象,而不是数组,因此NSDictionary方法将其初始化为objectWithString:NSDictionary没有objectAtIndex:方法,这就是您在尝试调用时看到异常的原因。