2014-03-27 34 views
0

当我将JSON数据放入NSDictionary时,出现错误*。我收到的错误是因为钥匙未被识别。JSON到NSDictionary。不应该这么难吗?

*错误[__ NSCFArray objectForKey:]:无法识别的选择发送到实例0x8d26cd0

JSON字符串输出如下:

[{"Username":"TestUsername"}] 

我使用的代码:

if(error == nil) 
{ 
    NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
    NSLog(@"%@",text); 

    NSError *error; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; 

    //Fails when using NSDictionary instead of NSArray 
    NSLog(@"json: %@", [json objectForKey:@"Username"]); 

    //NSLog(@"json: %@", json[0]); 
} 

当我使用NSArray时,这是输出:

{ 
    Username = Elder; 
} 
+3

这里'json'是'NSArray'而不是'NSDictionary'。所以'[json objectForKey:@“用户名”]'会崩溃。所以使用'[json [0] objectForKey:@“Username”]'来代替并将json更改为'NSArray * json' – Akhilrajtr

+0

啊谢谢。完美的作品。 – nimbus

回答

2

您的JSONArray其不是Dictionary。在json数组中,第一个对象是字典。

更正代码:

if(error == nil) 
{ 
    NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; 
    NSLog(@"%@",text); 

    NSError *error; 
    NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; 

    //Fails when using NSDictionary instead of NSArray 
    NSLog(@"json: %@", [json[0] objectForKey:@"Username"]); 

    //NSLog(@"json: %@", json[0]); 
} 
0

更改代码

NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; 

//Check the array count if required, if count is 0, jsonArray[0] crashes 
NSString *userName = [jsonArray[0] objectForKey:@"Username"]; 

NSLog(@"json: %@", userName); 

在你的代码JSONObjectWithData:返回一个NSArrayNSDictionary。因此objectForKey:NSArray上导致崩溃。