0

URLからjsonデータを取得しています。json "string"には、内部に複数のオブジェクトを含む1つのオブジェクトがあり、各オブジェクトには独自のキーと値のプロパティが含まれています...基本的に、jsonオブジェクトは多かれ少なかれ辞書オブジェクトであるオブジェクトを含むNSArrayです。NSJSONSerializationを使用しようとしていますが、ドキュメントがあまりなく、その方法がわからないようです。jsonがどのように表示されるかの例を次に示します。

{"allObjects":[{"firstName":"homer","middleName":"j","lastName":"simpson"
,"address": "123 evergreen terrace","countryCode":"US","zip":12345},
{"firstName": "marge","middleName":"b","lastName":"simpson","address":
"123 evergreen terrace","countryCode":"US","zip":12345}]}

(重要な場合、JSONオブジェクトにはさらに多くのエントリが含まれています)

辞書の配列(配列は「allObjects」)を取得するためにNSJSONSerializationで使用する必要がある特定の「オプション」はありますか?

どんな助けでも大歓迎です!

前もって感謝します。

アップデート

このコードはエラーになります:

@vishy私もこれを考えましたが、このコードを実行すると、

NSArray *json = [NSJSONSerialization JSONObjectWithData:geoNamesJSON options: kNilOptions error:&error];
NSDictionary *dict = [json objectAtIndex:0];
NSArray *allKeys = [dict allKeys];
NSString *key = [[NSString alloc] init];
NSEnumerator *keyEnum = [allKeys objectEnumerator];
NSLog(@"All keys in the first dictionary object:");
while(key = [keyEnum nextObject]){
    NSLog(@"%@", key);}

このエラーが発生します:

-[__ NSCFDictionary objectAtIndex:]:認識されないセレクターがインスタンス0x1fd7cd10に送信されました *キャッチされない例外'NSInvalidArgumentException'によりアプリが終了しました、理由:'-[__ NSCFDictionary objectAtIndex:]:認識されないセレクターがインスタンス0x1fd7cd10'に送信されました*最初のスロー呼び出しスタック:(0x3796c 0x3796fe07 0x3796e531 0x378c5f68 0xf310b 0xf219d 0x38ca4321 0x38cdecfd 0x38d53cc1 0x38cd86a7 0x38cd8481 0x38c52abb 0x38cc78d7 0x355b9bd9 0x3665c4b7 0x366611bd 0x3793ff3b 0x378b2ebd 0x378b2d49 0x37def2eb 0x38c91301 0xd3551 0x3c39db20)のlibc ++ abi.dylib:例外をスロー(lldb呼ば終了)

4

1 に答える 1

1

この手順を実行した後、配列に値を取得していますか

NSArray *json = [NSJSONSerialization JSONObjectWithData:geoNamesJSON options:kNilOptions error:&error]; 

あなたのjsonは辞書なので、私はそうは思いません。そのはず

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:geoNamesJSON options:kNilOptions error:&error];

jsonの処理に関する情報については、このチュートリアルに従うことができます。

編集:上記の行を使用してjson辞書を取得した後、この方法でデータを解析します

NSArray* geoList = [geoDict objectForKey:@"geonames"];
NSLog(@"first object in geolist--%@",[geoList objectAtIndex:0]);
//each object in the array is a dictionary
于 2012-10-21T14:26:07.700 に答える