Iphone 如何在objective-C中提取集合中的嵌套JSON值?

Iphone 如何在objective-C中提取集合中的嵌套JSON值?,iphone,objective-c,json,ios4,Iphone,Objective C,Json,Ios4,我有一个OData服务,可以为对象集合返回JSON值。我想将iPhone应用程序指向该服务的JSON对象集合(结果如下所示,其中有一条示例记录) 如何解析这些嵌套值?当我将响应字符串转换为JSON值时,它只获取“d”(我的代码也在下面) 目标C代码示例: - (void)requestFinished:(ASIHTTPRequest *)request { if (request.responseStatusCode == 200) { NSString *res

我有一个OData服务,可以为对象集合返回JSON值。我想将iPhone应用程序指向该服务的JSON对象集合(结果如下所示,其中有一条示例记录)

如何解析这些嵌套值?当我将响应字符串转换为JSON值时,它只获取“d”(我的代码也在下面)

目标C代码示例:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    if (request.responseStatusCode == 200)
    {
        NSString *responseString = [request responseString];

        textView.text = responseString;

        NSDictionary *responseDict = [responseString JSONValue];
        NSArray *keys = [responseDict allKeys];

        [self printArray:keys]; // This prints "d"
        ...
     }
}

您可以使用将json数据转换为一个
NSDictionary

从外观上看,
d
是另一个包含关键字
结果的字典的关键字,该字典包含一个包含数据的数组。试用

NSLog(@"%@", responseDict);

要查看整个树层次结构。

请使用此url

如果您有根键“d”,并且所有键实际上都是子键,请尝试

NSDictionary *responseDict = [[responseString JSONValue] objectForKey:@"d"];
甚至

NSArray *responseArray = [[[responseString JSONValue] objectForKey:@"d"] objectForKey:@"results"];
这是NSArray和NSDictionnary的交替:

NSDictionary *responseDict = [[responseString JSONValue] valueForKey:@"d"];
NSArray *responseArray = [responseDict valueForKey:@"results"];

NSDictionary *dict;
for(int i=0; i< [responseArray count]; i++){
    dict = [responseArray objectAtIndex:i];
    NSLog(@"- %@",[responseArray objectAtIndex:i]);

}
NSDictionary*responseDict=[[responseString JSONValue]valueForKey:@“d”];
NSArray*responseArray=[responseDict valueForKey:@“results”];
NSDictionary*dict;
对于(int i=0;i<[responseArray count];i++){
dict=[responseArray objectAtIndex:i];
NSLog(@“-%@,[responseArray objectAtIndex:i]);
}
它始终强烈依赖于您的JSON生成器。所以我不能肯定地告诉你,这永远是最好的挖掘方式,但在这种情况下,似乎是这样。记住:

  • [data1、data2、data3、data4]->阵列
  • {key1:data1,key2:data2}->字典

这肯定会让我达到目的。我怎样才能继续用链子拴下去?这是挖掘所需值数组的最佳方法吗?感谢更新-尽管这会产生此异常
-[\uu NSArrayM allKeys]:未识别的选择器发送到实例0x4c458d0
(注意,这是假设我用上面代码中的第二行替换responseDict初始化)感谢更新!这正是我想要的…一旦我理解了JSON数组符号并使用了更新的代码,我就可以轻松地使用它了。谢谢,这对轻松打印字典绝对有帮助。不过,我想对一个单独的房产进行几级评估,但不确定最好的方法(例如,如何获得“房产1”的价值)
NSDictionary *responseDict = [[responseString JSONValue] valueForKey:@"d"];
NSArray *responseArray = [responseDict valueForKey:@"results"];

NSDictionary *dict;
for(int i=0; i< [responseArray count]; i++){
    dict = [responseArray objectAtIndex:i];
    NSLog(@"- %@",[responseArray objectAtIndex:i]);

}