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

标签 iphone ios json asihttprequest json-framework

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

最佳答案

根据 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"];

关于iphone - 使用 Asihttprequest 和 iphone 的 Json 框架解析 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6974004/

相关文章:

ios - iCloud 用于保存相当频繁的游戏状态更改

ios - 自定义 UIView 或 UIControl 绘制文本与标签?

c# - 如何将包含包含数组的列表的列表从 C# 序列化为 JSON?

javascript - 为什么叫BSON?

iphone - 如何将图像下载移至后台线程以平滑UI?

iphone - 如何使用 MonoTouch 为 iPhone 更改带有自定义按钮的 UIKeyboard 的返回键?

ios - 没有找到合适的申请记录。验证您的 bundle 标识符 'org.cocoapods.Alamofire' 是否正确

c# - 如何在 ios xamarin studio 中生成 xml 文档文件?

iphone - 那么 CALayer 不包含 View 的内容位图?

json - Darkcoin nomp 矿池支付处理错误且缺少 ui