Ios Obj-C获取JSON密钥名
嗨,我正在尝试在PHP和iOS之间创建一个链接,我正在使用JSON。虽然我的JSON数组很奇怪,但我不是创建者,因为这是在一个封闭的API中,我无法更改它 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 这是我目前的代
{"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);
}];