0

私はiPhone開発の初心者で、このリンクからJSONArrayを解析しようとしています。問題は、このコードを実行すると、リンクのjSONArrayに含まれる80個の値ではなく、4個の値のみがNSArrayに含まれることを返すことです。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 に適切に変換していますか」

いいえ、そうではありません!解析している JSON に応じて、JSONObjectWithData配列または辞書を返すことができます。この場合、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 に答える