我一直在学习如何使用JSON框架和ASIHTTPRequest for iOS解析JSON。我已经使用Twitter提要进行了测试,并通过社区教程进行了自定义提要。一切进展顺利。
然后我想我将使用Northwind db的Microsoft Odata服务进行测试。您可以在此处查看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
答案 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"];