objectForKey,iOS中的JSON?不工作!

时间:2011-05-29 09:16:06

标签: iphone objective-c 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)

3 个答案:

答案 0 :(得分:4)

您的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);
        }
    }
}

答案 1 :(得分:1)

检查您的词典是否为零!

这样做的一个简单方法是:

if(!dictionary)NSLog(@"dictionary is nil!");

答案 2 :(得分:0)

我要检查两件事:

  1. 您的json正确生成

  2. 您指定的编码是正确的。

  3. 具体来说,我会尝试使用NSASCIIStringEncoding而不是NSUTF8StringEncoding(我建议只是因为它经常是我看到的问题的原因)