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

时间:2011-05-27 13:40:43

标签: iphone objective-c json ios4

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

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

{
"d" : {
"results": [
{
"__metadata": {
"uri": "http://someserver/service.svc/collection(1234L)", "type": "My.Namespace.Type"
}, "Property1": "value1", "Property2": 7274, "Collection1": {
"__deferred": {
"Property3": "http://someserver/service.svc/collection(1234L)/Images"
}
}
},
...

示例目标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"
        ...
     }
}

4 个答案:

答案 0 :(得分:2)

似乎你有一个根键“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]);

}

它总是强烈依赖于您的JSON生成器。所以我无法确定它总是最好的挖掘方式,但在这种情况下似乎是这样。记住:

  • [data1,data2,data3,data4] - &gt;阵列
  • {key1:data1,key2:data2} - &gt;字典

答案 1 :(得分:1)

从它的外观来看,d是另一个包含键results的字典的关键字,其中包含一个包含数据的数组。尝试使用

NSLog(@"%@", responseDict);

查看整个树的层次结构。

答案 2 :(得分:0)

您可以使用json-framework将json数据转换为NSDictionary

答案 3 :(得分:0)