Obj-C获取JSON密钥名称

嗨,我想创build一个PHP和iOS之间的链接,我正在使用JSON。 虽然我的JSON数组很奇怪,但我不是创build者,因为这是在一个封闭的API中,我不能改变它。

JSON看起来像这样:

{"success":true,"errors":[],"data":{"Servers":{"6":"Name here"}}} 

6是服务器的ID,另一个是名字。

正如你所看到的关键是ID和值是名称,但我如何在Objective-C中获得ID? 我知道如何接收服务器名称,但要做到这一点,我需要find服务器ID。

这是我现在的代码:

 NSDictionary *json = [[NSDictionary alloc] init]; NSError *error; json = [NSJSONSerialization JSONObjectWithData:_responseData options:kNilOptions error:&error]; NSDictionary *test = [dataDict objectForKey:@"Servers"] NSLog(@"%@", [test objectForKey:@"6"]); // Server Name (ID of server is 6) 

_responseData只是从PHP脚本接收到的JSON数据。

你会做这样的事情:

 [test enumerateKeysAndObjectsUsingBlock:^(NSString* serverId, NSString *serverName, BOOL *stop) { // Process data here. }]; 
 NSDictionary *jsonDict = @{@"success":@"true", @"errors":@[], @"data":@{ @"Servers":@{ @"6":@"Name here" } } }; NSDictionary *servers = jsonDict[@"data"][@"Servers"]; NSString *serverID = [[servers allKeys] firstObject]; NSLog(@"serverID: %@", serverID); 

输出:

serverID:6

对于多个服务器:

 for (NSString *serverId in servers) { NSString *serverName = servers[serverId]; NSLog(@"server key: %@, serverId: %@", serverId, serverName); } 

或者使用枚举:

 [servers enumerateKeysAndObjectsUsingBlock:^(NSString* serverId, NSString *serverName, BOOL *stop) { NSLog(@"server serverId: %@, serverName: %@", serverId, serverName); }]; 

这将在Objective-C中用一个字典来表示,所以你可能想要做一些如下的事情。 我假设你将服务器的响应存储在名为myServerResponse的variables中,该variables是一个字典。

 NSDictionary *data = myServerResponse[@"data"]; NSDictionary *server = data[@"Servers"]; for (NSString *key in server) { NSString *serverId = key; NSString *serverName = server[key]; } 

编辑:制作dataserver字典。
编辑Zaph:在关键string中添加@前缀,更正@“服务器”