JSON具有严格的键/值表示法,用于R4和响应的键/值对不正确。试试这个:
NSString *jsonString = @"{"quizz":[{"id":"1","Q1":"When Mickey was born","R1":"1920","R2":"1965","R3":"1923","R4":"1234","response":"1920"}]}";
如果您从文件中读取字符串,则不需要所有的斜杠。
文件将如下所示:
{“ quizz”:[{“ id”:“ 1”,“ Q1”:“米奇出生时”,“ R1”:“ 1920”,“ R2”:“ 1965”,“ R3”:“
1923”, “ R4”:“ 1234”,“响应”:“ 1920”},{“ id”:“ 1”,“ Q1”:“冷战开始时”,“ R1”:“ 1920”,“
R2”: “ 1965”,“ R3”:“ 1923”,“ R4”:“ 1234”,“响应”:“ 1920”}]}
我用以下代码进行了测试:
NSString *jsonString = @"{"quizz":[{"id":"1","Q1":"When Mickey was born","R1":"1920","R2":"1965","R3":"1923","R4":"1234","response":"1920"}, {"id":"1","Q1":"When start the cold war","R1":"1920","R2":"1965","R3":"1923","R4":"1234","reponse":"1920"}]}";NSLog(@"%@", jsonString);NSError *error = nil;NSDictionary *json = [NSJSonSerialization JSONObjectWithdata:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&error];NSArray *items = [json valueForKeyPath:@"quizz"];NSEnumerator *enumerator = [items objectEnumerator];NSDictionary* item;while (item = (NSDictionary*)[enumerator nextObject]) { NSLog(@"clientId = %@", [item objectForKey:@"id"]); NSLog(@"clientName = %@",[item objectForKey:@"Q1"]); NSLog(@"job = %@", [item objectForKey:@"Q2"]);}
我的印象是,您复制了旧代码,因为您没有使用Apple的序列化和Enumerator而不是Fast
Enumeration。整个枚举内容可以写为
NSArray *items = [json valueForKeyPath:@"quizz"];for (NSDictionary *item in items) { NSLog(@"clientId = %@", [item objectForKey:@"id"]); NSLog(@"clientName = %@",[item objectForKey:@"Q1"]); NSLog(@"job = %@", [item objectForKey:@"Q2"]);}
甚至是基于块的枚举的爱好者,如果需要快速安全的枚举,还需要另外一个索引。
NSArray *items = [json valueForKeyPath:@"quizz"];[items enumerateObjectsUsingBlock:^(NSDictionary *item , NSUInteger idx, BOOL *stop) { NSLog(@"clientId = %@", [item objectForKey:@"id"]); NSLog(@"clientName = %@",[item objectForKey:@"Q1"]); NSLog(@"job = %@", [item objectForKey:@"Q2"]);}];
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)