Obj-C获取JSON密钥名称

时间:2015-04-14 19:44:32

标签: 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。

这是我目前的代码:

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数据。

3 个答案:

答案 0 :(得分:4)

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);
}];

答案 1 :(得分:3)

您可以这样做:

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

答案 2 :(得分:0)

这将用Objective-C中的字典表示,所以你想要做类似下面的事情。我假设您将服务器的响应存储在名为myServerResponse的变量中,这是一个字典。

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

编辑:制作dataserver字典 编辑Zaph:为关键字符串添加了@前缀,更正了@“Servers”