Iphone 如何在objective-C中提取集合中的嵌套JSON值?
我有一个OData服务,可以为对象集合返回JSON值。我想将iPhone应用程序指向该服务的JSON对象集合(结果如下所示,其中有一条示例记录) 如何解析这些嵌套值?当我将响应字符串转换为JSON值时,它只获取“d”(我的代码也在下面) 目标C代码示例: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
- (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]);
}