从json中解析字典中的字典

时间:2014-07-23 07:45:53

标签: ios json parsing

我在Json收到一本字典,又一本字典。我已经解析了简单的Jsons但是对这种类型的Json感到困惑。

这是我完整的JSON:

{"status": "Success", "data": {"0": [{"startDate": "29-06-2014", "terms": "<li>Ieder lid mag maximaal 1x deelnemen per wedstrijd.</li>\r\n<li>Kosten voor deelname (1 CashCoin) worden automatisch ingehouden van het tegoed.</li>\r\n<li>De prijswinnaars worden na elke trekking op de website bekend gemaakt.</li>\r\n<li>Over de uitslag van deze prijsvraag kan niet worden gecorrespondeerd.</li>\r\n<li>Indien een wedstrijd wordt verplaatst of afgelast, dan behoudt CashbackKorting het recht de weddenschap ongedaan te maken.</li>", "imageCountry1": "https://static.orangebuddies.nl/image/sportbet/11-2-1399819708.png", "imageCountry2": "https://static.orangebuddies.nl/image/sportbet/Flag-CostaRica.jpg", "title": "Nederland - Costa Rica", "imageUrl": "https://static.orangebuddies.nl/image/sportbet/111399818552.png", "question": "Voorspel hier de uitslag voor de wedstrijd Nederland - Costa Rica:", "endDate": "25-07-2014", "drawDate": "27-07-2014", "reward": 50.0, "sportbetId": 42, "joinCost": 1.0}], "1": [{"optionId": 1613, "option": "0-0"}, {"optionId": 1614, "option": "0-1"}, {"optionId": 1615, "option": "1-0"}, {"optionId": 1616, "option": "1-1"}, {"optionId": 1617, "option": "2-0"}, {"optionId": 1618, "option": "2-1"}, {"optionId": 1619, "option": "0-2"}, {"optionId": 1620, "option": "1-2"}, {"optionId": 1621, "option": "2-2"}, {"optionId": 1622, "option": "3-0"}, {"optionId": 1623, "option": "3-1"}, {"optionId": 1624, "option": "3-2"}, {"optionId": 1625, "option": "0-3"}, {"optionId": 1626, "option": "1-3"}, {"optionId": 1627, "option": "2-3"}, {"optionId": 1628, "option": "3-3"}, {"optionId": 1629, "option": "4-0"}, {"optionId": 1630, "option": "4-1"}, {"optionId": 1631, "option": "4-2"}, {"optionId": 1632, "option": "4-3"}, {"optionId": 1633, "option": "4-4"}, {"optionId": 1634, "option": "0-4"}, {"optionId": 1635, "option": "1-4"}, {"optionId": 1636, "option": "2-4"}, {"optionId": 1637, "option": "3-4"}, {"optionId": 1638, "option": "5-0"}, {"optionId": 1639, "option": "5-1"}, {"optionId": 1640, "option": "5-2"}, {"optionId": 1641, "option": "5-3"}, {"optionId": 1642, "option": "5-4"}, {"optionId": 1643, "option": "5-5"}, {"optionId": 1644, "option": "0-5"}, {"optionId": 1645, "option": "1-5"}, {"optionId": 1646, "option": "2-5"}, {"optionId": 1647, "option": "3-5"}, {"optionId": 1648, "option": "4-5"}, {"optionId": 1649, "option": "6-0"}, {"optionId": 1650, "option": "6-1"}, {"optionId": 1651, "option": "6-2"}, {"optionId": 1652, "option": "6-3"}, {"optionId": 1653, "option": "6-4"}, {"optionId": 1654, "option": "6-5"}, {"optionId": 1655, "option": "6-6"}, {"optionId": 1656, "option": "1-6"}, {"optionId": 1657, "option": "2-6"}, {"optionId": 1658, "option": "3-6"}, {"optionId": 1659, "option": "4-6"}, {"optionId": 1660, "option": "5-6"}]}}

enter image description here

以下是我用来解析它的代码:

SportPrediction *prediction = [SportPrediction alloc];
if([json length] == 0){
    return nil;
}
NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSArray *dataArray = [resultsDictionary objectForKey:@"data"];
NSDictionary *predictionDictionary = [dataArray objectAtIndex:0];
prediction.title = [predictionDictionary objectForKey:@"title"];

我在此行收到无法识别的选择错误:

NSDictionary * predictionDictionary = [dataArray objectAtIndex:0];

4 个答案:

答案 0 :(得分:2)

您可以使用以下代码:

NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
NSDictionary *dataDictionary = resultsDictionary[@"data"];
NSArray *predictionArray = dataDictionary[@"0"];
NSDictionary *predictionDictionary = predictionArray[0];
prediction.title = predictionDictionary[@"title"];

答案 1 :(得分:2)

NSDictionary * resultsDictionary = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];

NSDictionary *dataArray = [resultsDictionary objectForKey:@"data"];
NSArray *predictionDictionary = [dataArray objectForKey:@"0"];
NSDictionary * dict1= [predictionDictionary  objectAtIndex:0];
SportPrediction *prediction = [SportPrediction alloc];

prediction.title = [dict1 objectForKey:@"title"];
prediction.joinCost = [dict1 objectForKey:@"joinCost"];
prediction.reward = [[dict1 objectForKey:@"reward"] integerValue];
prediction.question = [dict1 objectForKey:@"question"];
prediction.title = [dict1 objectForKey:@"title"];
prediction.terms = [dict1 objectForKey:@"terms"];
prediction.imageCountry1 = [dict1 objectForKey:@"imageCountry1"];
prediction.imageCountry2 = [dict1 objectForKey:@"imageCountry2"];
prediction.imageUrl = [dict1 objectForKey:@"imageUrl"];
prediction.sportbetId = [dict1 objectForKey:@"sportbetId"];

NSArray *oneArray = [dataArray objectForKey:@"1"];

for(NSDictionary * dic in oneArray){

NSString * optionID = [dic objectForKey:@“optionId”];  NSString * option = [dic objectForKey:@“option”];

}

答案 2 :(得分:0)

我想这不是一个有效的JSON。检查验证器以查看其中的错误。

enter image description here

答案 3 :(得分:0)

尝试使用以下代码。

NSDictionary *resultsDictionary = [NSJSONSerialization JSONObjectWithData:json options:7 error:nil];