我发现 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 服务请求信息。
您可以将 Web 服务想象为服务器上用于侦听特定 POST 或 GET 参数的脚本。
你可能有这样的网络服务:
http://www.mywebservice.com/rest/datatype=User?name=JohnSmith&age=20
请注意,“数据类型”、“名称”和“年龄”是 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 = {(
({
name = John Smith;
age = 20;
address = 123 Easy Street EARTH
}),
({
name = Bob Brown;
age = 35;
address = 456 Some Road EARTH
})
)};
然后,当您想从“用户”数组中获取特定用户时,比如 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