为什么NSSArray在解析JSONArray时没有填充?

时间:2013-02-27 20:47:58

标签: iphone json parsing nsarray nsdictionary

我是iphone开发的小伙子,我正试图从这个link解析JSONArray。问题是当执行此代码时,它返回我的NSArray只包含4个值而不是链接中包含的jSONArray的80个值。我是否正确地将NSDictionary转换为NSArray。任何帮助是极大的赞赏。我正在学习本教程here

 //parse out the json data
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                     options:kNilOptions 
                                                       error:&error];
NSArray* bitcoin = json; //2
NSLog(@"size of bitcoin is %lu", sizeof(bitcoin));

// 1) Get the bitcoin rate mtgoxUSD
for(int i = 0; i < sizeof(bitcoin); i++){
    NSDictionary* forex = [bitcoin objectAtIndex:i];
    NSString *mtgoxUSD = [forex objectForKey:@"symbol"];
    NSLog(@"value against mtgoxUSD %@", mtgoxUSD);

    if (mtgoxUSD==@"mtgoxUSD") {
        NSString *bitcoinrate = [forex objectForKey:@"avg"];
        if (bitcoinrate==@""||bitcoinrate==NULL) {
            currencyBTC=1;
            NSLog(@"currencyBTC: is 1");
        }else{
            currencyBTC=[bitcoinrate floatValue];
            NSLog(@"currencyBTC: %f", currencyBTC);
        }
        break;
    }

}

2 个答案:

答案 0 :(得分:1)

sizeof将以字节为单位返回指针结构的大小,这就是为什么你总是将4视为值。

您应该使用count方法:

for(int i = 0; i < [bitcoin count]; i++)

答案 1 :(得分:1)

  

“我是否正确地将NSDictionary转换为NSArray”

不,不完全! JSONObjectWithData可以返回数组字典,具体取决于您要解析的JSON。在这种情况下,您的JSON具有顶级数组,因此您根本不需要转换它。

首先,用这个替换你的前几行:

NSArray* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                 options:kNilOptions 
                                                   error:&error];

然后你想迭代你的数组,但是你当前的迭代代码并不完全正确。您可以使用pgb在另一个答案中建议的count方法,或者您可以使用Objective-C的非常漂亮的“快速枚举”功能,如下所示:

for id item in json {
    // Will iterate through all objects in the json array, accessible via item 
}