0

我对JSON ParsingiOS 中所谓的东西很陌生。谁能解释我如何从头开始解析数据。基本上我想说的是,我正在使用 Yahoo 天气 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);
4

1 回答 1

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 服务请求信息。

您可以将 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

于 2012-08-30T08:22:13.273 回答