2

JSONを使用してWebサーバーから場所のリストを取得し、アプリからファイルを取得しました。NSLog も出力したので、ログ ウィンドウの JSON に表示されるので、取得できることはわかっています。

次のステップは、これらの値を配列に取得して、最終的に UIPickerView に表示できるようにすることです。

現在のJSONファイルから配列に入れるのに最適な方法について何か提案はありますか?

キーは「名前」です。

私の人生では、それをループして配列に追加することはできません。多分私はそれを間違っていますか?

JSON データは次のようになります。

[{"Name":"Aberdaron"},{"Name":"Aberdeen"},{"Name":"Aberdovey"},{"Name":"Aberporth"},{"Name":"Aberystwyth"},{"Name":"Albert-Bridge"},{"Name":"Aldeburgh"},{"Name":"Allington-Lock"},{"Name":"Alloa"},{"Name":"Amble"},{"Name":"Amlwch"},{"Name":"Annan-Waterfoot"},{"Name":"Anstruther-Easter"},{"Name":"Applecross"},{"Name":"Appledore"},{"Name":"Arbroath"},{"Name":"Ardglass"},{"Name":"Ardnave-Point"},{"Name":"Ardrossan"},{"Name":"Arklow"},{"Name":"Arnside"},{"Name":"Arrochar"}]

私がこれまでに持っているコードは次のとおりです。

    NSString * urlString = [NSString stringWithFormat:@"http://localhost:8888/Locations.php"];
NSURL * url = [NSURL URLWithString:urlString];
NSData * data = [NSData dataWithContentsOfURL:url];
NSError * error;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"%@",json);
4

2 に答える 2

0

したがって、JSONはすでに配列としてダウンしています(キーと値のペアが角かっこで囲まれていることで示されます[ ])。サードパーティのJSON消費ライブラリを使用していない場合は、iOSに組み込まれているものを使用NSJSONSerializationして、JSONデータをObjective-Cオブジェクトに変換できます。おそらく、クラスメソッドが必要になるでしょう。このメソッド+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)errorは、NSDataへのポインタ、オプションフラグ、およびNSErrorへのポインタを取得するだけです。

メソッドがtypeidを返すことに注意してください。ただし、JSONは配列に含まれているため、先に進んで配列変数に固定します。NSDictionaryこれで、ループできるsの配列ができました。配列に名前が付けられているとjsonDataArrayすると、ピッカーの配列にすべての名前を配置するコードは非常に単純です。もちろん、NSMutableArray最初の配列をループして作成objectForKey:し、辞書からの結果を可変配列に追加することもできます。

はるかにシンプルでエレガントなアプローチは、シンプルなワンライナーです。

NSArray *names = [jsonDataArray valueForKey:@"Name"];

配列で使用すると、valueForKeyはそのキーのオブジェクトのすべての値を取得します。オブジェクトはNSDictionarysなので、値は必要なものになります。

于 2012-12-09T18:41:10.257 に答える
0

最初の回答は、配列を解析してネイティブ オブジェクトに配置する方法を適切に説明しています。以下で使用できる NSString のカテゴリである関数を作成しました。あなたの配列がjsonという変数に格納されていると仮定すると、あなたの例を考えると、次のコードを使用します:

NSMutableArray *nameArray = [NSMutableArray array];
for (NSDictionary *dictionary in json)
{
    [nameArray addObject:[dictionary valueForKey:@"Name"]];
}
NSLog(@"%@",nameArray);

nameArray は、例で指定された「名前」キーに対応するすべての値の配列です。

于 2012-12-09T19:00:17.530 に答える