-2

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

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

谢谢

4

2 回答 2

0

您的服务器未发送有效的 JSON。你从服务器得到的是

"[{\"pass\":\"example23\"},{\"user\":\"example\"}]"

这是一个 JSON字符串(包含 JSON 数据)。所以顶层对象不是字典或数组,根据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。)

于 2013-04-19T11:13:56.030 回答
0

您的 JSON 是一个字典数组。确保它placesDictionary是一个字典,从错误看来它是一个字符串。您的代码中没有错误。

编辑:

从日志中,placesDictionary 是一个数组。

NSDictionary *dict = placesDictionary[0];
NSString *itemToPassBack = dict[@"pass"];
于 2013-04-19T10:08:29.943 回答