AFNetworking のおかげで生活がずっと楽になりました。
私は通常、POSTパラメーターを渡すなど、これ以上のことを行いますが、これはあなたの場合に役立ちます:
NSURL *url = [NSURL URLWithString:@"http://weather.yahooapis.com/forecastjson?w=2502265"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
// PARSE YOUR JSON DICTIONARY HERE
[self parseResult:JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Failed to get data from web service, error: %@", [error localizedDescription]);
}];
[operation start];
// method to parse web service JSON
-(void)parseResult:(id)jsonDictionary
{
// parse result here
NSLog(@"Title = %@", [jsonDictionary valueForKey:@"title"];
}
それが役立つことを願っています。
あなたのためのいくつかの基本的な情報
あなたがしているのは、Web サービスからの情報を要求することです。
特定の POST または GET パラメーターをリッスンするサーバー上のスクリプトのような Web サービスを考えることができます。
次のような Web サービスがあるとします。
http://www.mywebservice.com/rest/datatype=User?name=JohnSmith&age=20
「datatype」、「name」、および「age」は、Web サービスが期待するパラメーターであることに注意してください。Web サービスにリクエストを送信するときは、通常、これらのパラメーターに値 (この場合は "User"、"JohnSmith"、および "20" が値です) を渡します。
最近では、Web サービスは通常、JSON または XML の形式でデータを返します。
JSON はこれらすべての XML フォーマットを行う必要はありません。その結果、JSON はデータを返すためのより好ましい選択肢になる傾向があります。
返される JSON データは次のようになります。
{
users = {(
({
name = John Smith;
age = 20;
address = 123 Easy Street EARTH
}),
({
name = Bob Brown;
age = 35;
address = 456 Some Road EARTH
})
)};
}
上記は最初は少し怖いかもしれませんが、一度対処すると、これらは通常、配列内にネストされた辞書であり、巨大な辞書内にネストされていることがわかります。
上記の場合と同様に、返される JSON データは、すべてのユーザーを含む単一の巨大な辞書です。次のようなことをすると:
[JSON objectForKey:@"users"]
「users」配列を取得します。
users = {(
({
name = John Smith;
age = 20;
address = 123 Easy Street EARTH
}),
({
name = Bob Brown;
age = 35;
address = 456 Some Road EARTH
})
)};
次に、「users」配列から特定のユーザーを取得したい場合、たとえば Bob Brown の場合は、次のようにします。
[[JSON objectForKey:@"users"] objectAtIndex:1]
そして、それはあなたを返します:
{
name = Bob Brown;
age = 35;
address = 456 Some Road EARTH
}
最後に、名前などのユーザーのプロパティを取得するには、次のようにします。
[[[JSON objectForKey:@"users"] objectAtIndex:1] valueForKey:@"name"];
例えば:
NSLog(@"User name = %@", [[[JSON objectForKey:@"users"] objectAtIndex:1] valueForKey:@"name"]);
実際の Web サービス ディクショナリは通常、適切にフォーマットされているわけではありません。通常、もう少し複雑です。特に Drupal のような CMS では (実行!!!) :D