无法从带有对象forkeys的json的nsdictionary获取数据

时间:2013-04-19 09:55:14

标签: ios nsdictionary nsjsonserialization

我在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

我不知道发生了什么,我在其他项目中做过它并且有效..

谢谢

2 个答案:

答案 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。)