解析JSON对象-目标C

杰里米

我正在努力查看为什么此代码无法正常工作。我有许多使用不同的JSON服务的其他视图。一切正常。但是,这根本不是。我按预期从服务中取回值,但是当尝试对其进行循环(请参见下面的代码)时,数组为Nil。显然,我错过了一些简单的事情,但是长期以来我一直在研究这个问题。

JSON服务的抽象视图;

    {
    "0": {
        "altitude": "14500",
        "latitude": "41.41555",
        "longitude": "-73.09605",
        "realname": "David KGNV"
    },
    "1": {
        "altitude": "61",
        "latitude": "33.67506",
        "longitude": "-117.86739",
        "realname": "Mark CT"
    },
    "10": {
        "altitude": "38161",
        "latitude": "40.51570",
        "longitude": "-93.25554",
        "realname": "Bob CYYZ"
    },
    "100": {
        "altitude": "33953",
        "latitude": "52.35600",
        "longitude": "5.30384",
        "realname": "Jim LIRQ"
    }
}

JSON调用的抽象视图;

*注意,NSArray * currentMapArray valueKeyPath设置为“”,因为我需要JSON结果中的所有元素。

  NSError *_errorJson = nil;
         jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

         if (_errorJson != nil) {
             NSLog(@"Error %@", [_errorJson localizedDescription]);
         } else {
             //Do something with returned array
             dispatch_async(dispatch_get_main_queue(), ^{
                 NSDictionary *mapJson = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

                 //Loop through the JSON array
                 NSArray *currentMapArray = [mapJson valueForKeyPath:@""];

                 //set up array and json call
                 mapArray = [[NSMutableArray alloc]init];


                 for (int i = 0; i< currentMapArray.count; i++)
                 {
                     //create our object
                     NSString *nAltitude = [[currentMapArray objectAtIndex:i] objectForKey:@"altitude"];
                     NSString *nRealname = [[currentMapArray objectAtIndex:i] objectForKey:@"realname"];
                     NSString *nLatitude = [[currentMapArray objectAtIndex:i] objectForKey:@"latitude"];
                     NSString *nLongitude = [[currentMapArray objectAtIndex:i] objectForKey:@"longitude"];

                     [mapArray addObject:[[LiveVatsimMap alloc]initWithaltitude:nAltitude andrealname:nRealname andlatitude:nLatitude andlongitude:nLongitude]];
                 }

currentMapArray的结果为NIL,导致未正确填写NSString。

for (int i = 0; i< currentMapArray.count; i++)

当然,当我将JSON节点的值(即10)硬编码到ValueKeyPath中时,它将提供正确的数据结果并相应地进行填充。

有任何想法吗?很好...我只是这个目标的新手。

保尔11

您的JSON没有数组-它是字典的字典。

您可以使用对其进行迭代

 NSArray *keys=[jsonArray allKeys];
 for (NSString *key in keys) {
     NSDictionary *elementDictionary=jsonArray[key];
     NSString *nAltitude = elementDictionary[@"altitude"];
     NSString *nRealname = elementDictionary[@"realname"];
     NSString *nLatitude = elementDictionary[@"latitude"];
     NSString *nLongitude = elementDictionary[@"longitude"];

     [mapArray addObject:[[LiveVatsimMap alloc]initWithaltitude:nAltitude andrealname:nRealname andlatitude:nLatitude andlongitude:nLongitude]];
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章