Ios Obj-C获取JSON密钥名

Ios Obj-C获取JSON密钥名,ios,objective-c,json,Ios,Objective C,Json,嗨,我正在尝试在PHP和iOS之间创建一个链接,我正在使用JSON。虽然我的JSON数组很奇怪,但我不是创建者,因为这是在一个封闭的API中,我无法更改它 JSON如下所示: {"success":true,"errors":[],"data":{"Servers":{"6":"Name here"}}} 6是服务器的ID,另一个是名称 正如您所看到的,键是ID,值是名称,但是如何在Objective-C中获得ID呢?我知道如何接收服务器名,但要做到这一点,我需要找到服务器ID 这是我目前的代

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

JSON如下所示:

{"success":true,"errors":[],"data":{"Servers":{"6":"Name here"}}}
6是服务器的ID,另一个是名称

正如您所看到的,键是ID,值是名称,但是如何在Objective-C中获得ID呢?我知道如何接收服务器名,但要做到这一点,我需要找到服务器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数据。

这将用Objective-C中的字典表示,因此您需要执行以下操作。我假设您将服务器的响应存储在一个名为myServerResponse的变量中,该变量是一个字典

NSDictionary *data = myServerResponse[@"data"];
NSDictionary *server = data[@"Servers"];
for (NSString *key in server) {
        NSString *serverId = key;
        NSString *serverName = server[key];
}
编辑:制作数据和服务器字典。
编辑Zaph:将@prefix添加到键字符串中,更正@Servers

您可以执行以下操作:

[test enumerateKeysAndObjectsUsingBlock:^(NSString* serverId, NSString *serverName, BOOL *stop) {
    // Process data here.
}];
输出:

服务器ID: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);
}];

到目前为止你在哪里?显示代码。你能得到字典吗?你的服务器密钥嵌套在数据密钥中,所以你必须先调用objectForKey:@data,然后再调用服务器的结果。看看扎夫的回答。他的jsonDict是你的_responseData。如果所有其他方法都失败了,请阅读NSDictionary的文档。虽然这得到了答案,但我觉得它避开了问题的重点。它的措辞不是很好,但很明显,他需要处理每台服务器,而不仅仅是第一台。添加了一个lop来处理所有密钥。这就是当您快速编写伪代码时会发生的情况!谢谢你抓到这个。
[servers enumerateKeysAndObjectsUsingBlock:^(NSString* serverId, NSString *serverName, BOOL *stop) {
    NSLog(@"server serverId: %@, serverName: %@", serverId, serverName);
}];