Objective c “如何访问数据”;“深”;在字典里?

Objective c “如何访问数据”;“深”;在字典里?,objective-c,nsdictionary,Objective C,Nsdictionary,我从一个web服务中得到一个JSON响应,如下所示,并将其输入到一个NSDictionary中 NSDictionary *fetchAllCollectionsJSONResponse = [NSJSONSerialization JSONObjectWithData:data options:0

我从一个web服务中得到一个JSON响应,如下所示,并将其输入到一个NSDictionary中

NSDictionary *fetchAllCollectionsJSONResponse = [NSJSONSerialization JSONObjectWithData:data
                                                                             options:0
                                                                               error:NULL];
如果我转储NSDictionary的输出,它看起来是这样的

2017-10-06 10:11:46.097698+0800 NWMobileTill[396:33294] +[ShopifyWebServices fetchAllCollections]_block_invoke, {
    data =     {
        shop =         {
            collections =             {
                edges =                 (
                                        {
                        cursor = "eyJsYXN0X2lkIjo0NTI4NTY3MTcsImxhc3RfdmFsdWUiOiI0NTI4NTY3MTcifQ==";
                        node =                         {
                            description = "";
                            id = "Z2lkOi8vc2hvcGlmeS9Db2xsZWN0aW9uLzQ1Mjg1NjcxNw==";
                        };
                    },
                                        {
                        cursor = "eyJsYXN0X2lkIjo0NTI4NTkwODUsImxhc3RfdmFsdWUiOiI0NTI4NTkwODUifQ==";
                        node =                         {
                            description = "Test Collection 1";
                            id = "Z2lkOi8vc2hvcGlmeS9Db2xsZWN0aW9uLzQ1Mjg1OTA4NQ==";
                        };
                    },
                                        {
                        cursor = "eyJsYXN0X2lkIjo0NTU0OTMwMDUsImxhc3RfdmFsdWUiOiI0NTU0OTMwMDUifQ==";
                        node =                         {
                            description = Sovrum;
                            id = "Z2lkOi8vc2hvcGlmeS9Db2xsZWN0aW9uLzQ1NTQ5MzAwNQ==";
                        };
                    },
                                        {
                        cursor = "eyJsYXN0X2lkIjo0NTU0OTMzODksImxhc3RfdmFsdWUiOiI0NTU0OTMzODkifQ==";
                        node =                         {
                            description = Badrum;
                            id = "Z2lkOi8vc2hvcGlmeS9Db2xsZWN0aW9uLzQ1NTQ5MzM4OQ==";
                        };
                    }
                );
                pageInfo =                 {
                    hasNextPage = 0;
                };
            };
        };
    };
}
我需要在这个结构的深处访问“description”属性,但我不知道怎么做

我尝试了以下方法,但它崩溃了

for (NSDictionary *dictionary in fetchAllCollectionsJSONResponse) {
    NSLog(@"jongel %@", [dictionary objectForKey:@"data"]);
}

fetchAllCollectionsJSONResponse
是一个
字典
而不是
数组
。试试这个

NSDictionary *fetchAllCollectionsJSONResponse = nil;
NSDictionary *data = fetchAllCollectionsJSONResponse[@"data"];
NSDictionary *shop = fetchAllCollectionsJSONResponse[@"shop"];
NSDictionary *collections = fetchAllCollectionsJSONResponse[@"collections"];
NSArray *edges = fetchAllCollectionsJSONResponse[@"edges"];

// Or a shorter version 
// NSArray *edges = fetchAllCollectionsJSONResponse[@"data"][@"shop"][@"collections"][@"edges"];

for (NSDictionary *edge in edges) {
    NSString *cursor = edge[@"cursor"];
    NSDictionary *node = edge[@"node"];
}

@比拉尔的答案是正确的。这可能更容易阅读:

NSArray *edges = fetchAllCollectionsJSONResponse[@"data"][@"shop"][@"collections"][@"edges"];
for (NSDictionary *edge in edges) {
    NSString *description = edge[@"node"][@"description"];
    NSLog(@"description = %@", description);
}

你的代码下降了一级,其余的呢?但即使在这一级它也会崩溃,所以我一定是做错了什么,如果我不能下降一级,我甚至不知道如何深入结构。正如@Bilal所指出的,
fetchAllCollectionsJSONResponse
是一本字典,不是数组。我想你的意思是说
fetchAllCollectionsJSONResponse
是一个字典而不是数组。这正是我工作所需要的,我只是想了解你是如何用这么少的代码1,从原始dict创建了一个dict数组的,每个dict对应一个级别2,你正在循环每个dict,但是你怎么知道自己处于正确的水平呢?是吗?查看输出可以确定原始字典的结构,
fetchAllCollectionsJSONResponse
,这是一个包含字典、包含字典等的字典。我从不创建任何数组。我只是访问
fetchAllCollectionsJSONResponse
中包含的数据。但是您创建了NSArray*边,这只是为了在深入原始Dict时跟踪索引吗?我创建了一个局部变量
edges
,它是指向数组的指针。然后我创建一个局部变量
edge
,它指向数组的元素,但我自己从未创建过任何数组。