在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
”