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

时间:2011-08-07 16:21:01

标签: iphone ios json asihttprequest json-framework

我一直在学习如何使用JSON框架和ASIHTTPRequest for iOS解析JSON。我已经使用Twitter提要进行了测试,并通过社区教程进行了自定义提要。一切进展顺利。

然后我想我将使用Northwind db的Microsoft Odata服务进行测试。您可以在此处查看json结果:

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

现在我正在努力解决如何解析产品名称的问题。有人能指出我正确的方向吗?

根据我的要求完成了我的

- (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。

我使用的服务网址是:

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

1 个答案:

答案 0 :(得分:3)

根据the link you have provided,您的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"];