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]; }
编辑:制作data
和server
字典。
编辑Zaph:在关键string中添加@
前缀,更正@“服务器”