3

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

然后我想我会使用 Microsoft Odata Service for Northwind db 进行测试。您可以在此处查看 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。

我使用的服务 URL 是:

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

4

1 回答 1

3

根据您提供的链接,您的 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"];
于 2011-08-07T16:36:53.440 回答