objectForKey,iOS中的JSON?不工作!

问题描述

| 我已经通过使用下面的代码将一些MysqL数据反馈给应用程序,当然不是所有的东西都存在,只有需要的东西。尽管已成功从我的PHP文件返回了JSON,但我似乎无法抓住\'cash \'的值。我正在使用Touch JSON。 请帮忙?
Nsstring *urlString = [Nsstring stringWithFormat:@\"http://REMOVED/REMOVED.PHP?login_key=%@&username=%@\",login_key,username];

Nsstring *strResponse = [self stringWithUrl:[NSURL URLWithString:urlString]];
NSLog(@\"%@\",strResponse);


NSData *jsonData = [strResponse dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:&error];
NSLog(@\"Cash: %@\",[dictionary objectForKey:@\"cash\"]);
这将返回以下日志:
2011-05-29 10:10:35.493 test1[623:207] [[[{\"uid\":\"0\",\"username\":\"admin\",\"password\":\"REMOVED\",\"email\":\"REMOVED\",\"cash\":\"925071\",\"exp\":\"117500\",\"level\":\"1\",\"clan\":\"YES\",\"clanid\":\"1\"}]]]

2011-05-29 10:10:35.495 test1[623:207] Cash: (null)
    

解决方法

        您的JSON数据包含一个数组作为顶级对象,因此您不能将其反序列化为字典:
[
  [
    [
      {
        \"cash\" : \"925071\",\"clan\" : \"YES\",\"clanid\" : \"1\",\"email\" : \"REMOVED\",\"exp\" : \"117500\",\"level\" : \"1\",\"password\" : \"REMOVED\",\"uid\" : \"0\",\"username\" : \"admin\"
      }
    ]
  ]
]
尝试以下方法:
NSArray *array = [[CJSONDeserializer deserializer] deserializeAsArray:jsonData
                                                                error:&error];
另外,请注意,JSON数据中有三个数组,只有最里面的数组包含一个对象(一个字典)。目前尚不清楚为什么有三个嵌套数组,以及数组中的其他元素是什么,因此很难为您的问题提供通用的解析解决方案。一种可能性是:
for (NSArray *innerArray2 in array) {
    for (NSArray *innerArray3 in innerArray2) {
        for (NSDictionary *dictionary in innerArray3) {
            NSString *cash = [dictionary objectForKey:@\"cash\"];
            NSLog(@\"Cash = %@\",cash);
        }
    }
}
    ,        检查您的字典是否为空! 一个简单的方法是:
if(!dictionary)NSLog(@\"dictionary is nil!\");
    ,        我会检查两件事: 您的json正确产生 您指定的编码是正确的编码。 具体来说,我会尝试使用NSASCIIStringEncoding而不是NSUTF8StringEncoding(我建议这样做仅是因为据我所知,这通常是问题的原因)