iOS中的objectForKey,JSON?不工作!

Posted

技术标签:

【中文标题】iOS中的objectForKey,JSON?不工作!【英文标题】:objectForKey, JSON in iOS? Not working! 【发布时间】:2011-05-29 09:16:05 【问题描述】:

我已经使用下面的代码将一些 mysql 数据反馈给应用程序,当然不是所有的都在那里,只有需要的。尽管从我的 php 文件中成功返回了 JSON,但我似乎无法获取“现金”的价值。我正在使用 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)

【问题讨论】:

你检查dictionary是否创建成功? 你会如何建议这样做? :O 【参考方案1】:

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

【讨论】:

【参考方案2】:

检查你的字典不为零!

一个简单的方法是:

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

【讨论】:

@buzzkip:检查错误:if( !dictionary ) NSLog(@"%@", error); 这不是一个真正的解决方案,但我建议尝试code.google.com/p/json-framework 我已经用过很多次了,它总是很有魅力:) 您可以做的另一件事是输入另一个简单的 JSON 字符串并尝试反序列化它。如果这可行,您可以缩小错误范围。【参考方案3】:

我会检查两件事:

    您的 json 生成正确

    您指定的编码是正确的。

具体来说,我会尝试使用 NSASCIIStringEncoding 而不是 NSUTF8StringEncoding(我建议这样做只是因为据我所见,这通常是问题的原因)

【讨论】:

以上是关于iOS中的objectForKey,JSON?不工作!的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发之——objectForKey与valueForKey在NSDictionary中的差异

sed不工作大文件[寻找其他选择]

将 JSON 嵌套到核心数据和 ObjectForKey 错误

通过 JSON 层次结构和 objectForKey 使用 AFNetworking 加载图像视图

NSDictionary objectForKey 返回值

用于 Google Places API 的 Objective-C + JSON Parse objectForKey