我是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;
}
}
答案 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
}