我在NSDictionary中获得了一个json。如果我做了NSDictionary的NSLog,我正在看这个json。
NSLog->> {"login":{"pass":"yeeply123","user":"Yeeply"}}
我在这里找到地方词典:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSError *thisError;
NSDictionary *parsedObject = [NSJSONSerialization JSONObjectWithData:myConnectionData options:NSJSONReadingMutableContainers|NSJSONReadingAllowFragments error:&thisError];
NSLog(@"Prueba %@", parsedObject);
[self.delegate requestJSONFinishedWithParsedObject:placesDictionary];
}
我将它作为placesDictionary传递给其他函数 但是当我尝试用这句话从这个NSDictionary获取数据时:
NSDictionary *userDictionary= [placesDictionary objectForKey:@"login"];
NSString *pass= [userDictionary objectForKey:@"pass"];
我收到这样的错误:
-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x7172f10
我不知道发生了什么,我在其他项目中做过它并且有效..
谢谢
答案 0 :(得分:0)
您的JSON是一个字典数组。确保placesDictionary
是一个字典,从错误看它似乎是一个字符串。您的代码中没有错误。
编辑:
从日志placesDictionary是一个数组。
NSDictionary *dict = placesDictionary[0];
NSString *itemToPassBack = dict[@"pass"];
答案 1 :(得分:0)
您的服务器未发送有效的JSON。你从服务器得到的是
"[{\"pass\":\"example23\"},{\"user\":\"example\"}]"
这是一个JSON 字符串(包含JSON数据)。所以顶级 object不是字典或数组,根据JSON规范无效。
您的电话
[NSJSONSerialization JSONObjectWithData:myConnectionData:...]
成功只是因为NSJSONReadingAllowFragments
选项,否则
它会失败。
字符串本身包含有效的JSON数据,因此您可以做的是应用另一个 JSON解析操作到字符串的内容:
NSString *parsedObject = [NSJSONSerialization JSONObjectWithData:myConnectionData options:NSJSONReadingAllowFragments error:&thisError];
NSData *innerJson = [parsedObject dataUsingEncoding:NSUTF8StringEncoding];
NSMutableArray *innerObject = [NSJSONSerialization JSONObjectWithData:innerJson options:NSJSONReadingMutableContainers error:&thisError];
innerObject
现在是一个包含两个词典的数组,您可以访问它们:
NSString *pass = [[innerObject objectAtIndex:0] objectForKey:@"pass"];
(当然更好的解决方案是修复服务器以发送适当的JSON。)