我一直在学习如何使用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"];