使用Asihttprequest和iphone的JSON框架解析JSON数据



我一直在学习如何使用JSON框架和iOS的ASIHTTPRequest来解析JSON。我已经测试过使用twitter feed和通过社区教程定制feed。一切顺利。

我想我将测试使用微软Odata服务的北风数据库。你可以在这里查看json结果:

http://jsonviewer.stack.hu/http://services.odata.org/Northwind/Northwind.svc/Products%281%29? $格式= json

现在我正在努力弄清楚如何解析产品名称。有人能给我指个方向吗?

On my requestFinished i have this:

- (void)requestFinished:(ASIHTTPRequest *)request
{    
    [MBProgressHUD hideHUDForView:self.view animated:YES];
    NSString *responseString = [request responseString];
    NSDictionary *responseDict = [responseString JSONValue];
    //find key in dictionary
    NSArray *keys = [responseDict allKeys];
    NSString *productName = [responseDict valueForKey:@"ProductName"];
    NSLog(@"%@",productName);
}

在日志中我有空。

如果我将valueforKey更改为@"d",我将获得整个有效负载,但我只想要productName。

我使用的服务URL是:

http://servers.odata.org/Northwind/Northwind.svc/Products(1) ? $格式= json

根据您提供的链接,您的JSON具有以下格式:

{
  "d": {
    ...
    "ProductName": "Chai",
    ...
  }
}

在顶层,您只有一个键:"d"。如果你这样做:

NSString *productName = [responseDict valueForKey:@"ProductName"];

返回nil。您需要在层次结构中更深入:

NSDictionary *d = [responseDict valueForKey:@"d"];
NSString *productName = [d valueForKey:@"ProductName"];

或简单的:

NSString *productName = [responseDict valueForKeyPath:@"d.ProductName"];

最新更新