0

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

 //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;
    }

}
4

2 回答 2

1

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

您应该改用该count方法:

for(int i = 0; i < [bitcoin count]; i++)
于 2013-02-27T20:52:18.470 回答
1

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

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

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

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

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

for id item in json {
    // Will iterate through all objects in the json array, accessible via item 
}
于 2013-02-27T20:53:41.657 回答