我正在尝试解析我的iOS应用的API。但是,由于某种原因,API会返回我无法解析的JSON(使用NSJSONSerialization)。由于我不知道player1和player2的名字,我不能使用objectForKey(在测试中,前者知道player1是玩家的名字等,有效)。所以我使用objectAtIndex导致崩溃," - [__ NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例"。
的 JSON:
{
"id": "idnumb",
"numentrants": 2,
"entrants": {
"player1": {
"displayname": "player1",
"otherdata": 1234,
},
"player2": {
"displayname": "player2",
"otherdata": 5678,
}
}
}
对象C:
NSError *jsonParsingError = nil;
NSDictionary *eventArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonParsingError];
for(int i = 0; i < [[eventArray objectForKey:@"entrants"] count]; i++)
{
NSArray *entrantsArray = [[eventArray objectForKey:@"entrants"] objectAtIndex:i];
NSLog(@"%@", entrantsArray);
}
由于
答案 0 :(得分:1)
参赛者是字典,而不是数组。 :)
您可以使用NSObject isKindOfClass方法检查已解析的JSON的元素是字典还是数组,然后相应地处理它们。
如果要通过索引访问字典的值,可以通过调用NSDictionary的allValues方法来检索值的数组。
答案 1 :(得分:1)
JSON数据中没有任何对象是数组,只有字典。您需要像字典一样枚举它,而不是数组,例如:
NSDictionary *entrants = [eventArray objectForKey:@"entrants"];
for(NSString *playerName in entrants)
{
NSLog(@"%@", playerName);
NSDictionary *playerData = [entrants objectForKey:playerName];
for (NSString *dataName in playerData)
{
NSLog(@"%@: %@", dataName, [playerData objectForKey:dataName]);
}
}