您好我正在尝试在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数据。
答案 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];
}
编辑:制作data
和server
字典
编辑Zaph:为关键字符串添加了@
前缀,更正了@“Servers”