我使用下面的代码将一些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)
答案 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)
我要检查两件事:
您的json正确生成
您指定的编码是正确的。
具体来说,我会尝试使用NSASCIIStringEncoding而不是NSUTF8StringEncoding(我建议只是因为它经常是我看到的问题的原因)