我对iOS中名为JSON Parsing
的东西很陌生。任何人都可以解释我如何从头开始解析数据。基本上我要告诉的是,我正在使用Yahoo weather api来获取某个位置的天气。http://weather.yahooapis.com/forecastjson?w=2502265
是我正在使用它的链接。现在我该如何解析它的数据?
我这样做是错误的。有人可以纠正它或者告诉我该怎么做吗?
NSString * address = @"http://weather.yahooapis.com/forecastjson?w=2502265";
NSString * request = [NSString stringWithFormat:@"%@",address];
NSURL * URL = [NSURL URLWithString:request];
NSString* JSON = [NSString stringWithContentsOfURL:URL encoding:NSUTF8StringEncoding error:&error];
NSError *e = nil;
NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:JSON options:NSJSONReadingMutableContainers error:&e];
NSLog(@"%@", json);
答案 0 :(得分:2)
我发现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参数。
您可能拥有以下网络服务:
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 = {(
({
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"]);
真正的网络服务词典通常不是很好的格式,它们通常有点复杂,特别是像Drupal那样的CMS(运行!!!):D