在IOS中parsing嵌套的JSON代码

我试图parsingiOS中的以下JSON代码。 JSON代码由一组编号为0到x的游戏组成。 我一直在四处search,但似乎无法find任何具有这种格式的JSON的例子。

{ "command":"show_my_games", "0":{"gameid":"7","foruserid":"16","againstuserid":"0","casefor":"","caseagainst":"","status":"0","argumentid":"7","againstusername":null,"forusername":"Gem","argument":"argument 1"}, "1":{"gameid":"8","foruserid":"15","againstuserid":"16","casefor":"","caseagainst":"","status":"0","argumentid":"23","againstusername":"Gem","forusername":"Nick","argument":"argument 2"}, "2":{"gameid":"9","foruserid":"18","againstuserid":"16","casefor":"","caseagainst":"","status":"0","argumentid":"26","againstusername":"Gem","forusername":"Nick","argument":"argument 3"} } 

我创build了一个游戏对象,对于JSON数组中的每个项目,我想创build一个新的游戏对象,并将其添加到游戏数组中。 我无法parsingJSON,我很感激任何帮助或build议。

我正在尝试使用的代码是

  NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&err]; for (NSMutableDictionary * gameItem in json) { Game *obj = [Game new]; obj.GameID=[gameItem objectForKey:@"gameid"]; obj.Argument=[gameItem objectForKey:@"argument"]; obj.CaseFor=[gameItem objectForKey:@"casefor"]; obj.CaseAgainst=[gameItem objectForKey:@"caseagainst"]; obj.CaseForOwner=[gameItem objectForKey:@"forusername"]; obj.CaseAgainstOwner=[gameItem objectForKey:@"againstusername"]; obj.CaseForOwnerID=[gameItem objectForKey:@"foruserid"]; obj.CaseAgainstOwnerID=[gameItem objectForKey:@"againstuserid"]; //add to the players game array [myGameArray addObject:obj]; } NSLog(@"array: %@", myGameArray); 

当我尝试从JSON数组中提取数据时,我收到以下错误。 – [__ NSCFString objectForKey:]:无法识别的select器发送到实例0x1f06f4e0

提前致谢,

缺口

由于键盘command的对象不是字典,代码正在破译。

你可以像这样修改代码。

  for (NSString *key in json){ id object = json[key]; if ([object isKindOfClass:[NSDictionary class]]) { Game *obj = [Game new]; obj.GameID=[gameItem objectForKey:@"gameid"]; obj.Argument=[gameItem objectForKey:@"argument"]; obj.CaseFor=[gameItem objectForKey:@"casefor"]; obj.CaseAgainst=[gameItem objectForKey:@"caseagainst"]; obj.CaseForOwner=[gameItem objectForKey:@"forusername"]; obj.CaseAgainstOwner=[gameItem objectForKey:@"againstusername"]; obj.CaseForOwnerID=[gameItem objectForKey:@"foruserid"]; obj.CaseAgainstOwnerID=[gameItem objectForKey:@"againstuserid"]; //add to the players game array [myGameArray addObject:obj]; } 

我会build议在你的Game类中创build一个initWithDictionary:(NSDictionary *)dictionary以获得更清晰的代码。

你需要改变typesgameItem“ NSMutableDictionary ”为“ id ”,并添加检查 – if ([gameItem isKindOfClass: [NSDictionary Class]])并在这种情况下初始化“ obj