【问题标题】:Keys in a dictionary from JSON来自 JSON 的字典中的键
【发布时间】:2011-11-06 19:02:31
【问题描述】:

我正在导入 JSON 字典。我需要知道要使用它的键的名称。

字典加载数据正常:

   - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];    
  NSDictionary *results = [responseString JSONValue];
  NSLog(@"tenga: %@",results);

但是当我尝试获取键名时,应用程序崩溃了:

NSArray * keys = [results allKeys];
NSLog(@"keys: %@",keys); ...}

错误信息:

[__NSArrayM allKeys]:无法识别的选择器发送到实例 0x5a16b30 2011-08-30 22:52:26.171 Twitter Search[1906:207] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayM allKeys]:无法识别的选择器发送到实例 0x5a16b30 '

为什么allKeys 不起作用?

如何获取密钥的名称以便开始使用对象?

编辑

我正在使用http://code.google.com/p/json-framework Stig Brautaset json framework

【问题讨论】:

  • 你遇到了什么样的崩溃?
  • 嗨 Tnx,我在问题中添加了错误欢呼
  • 另外你使用的是什么 JSON 框架?
  • 您的服务器返回数组,而不是字典。检查响应字符串的值,例如使用 NSLog 打印。
  • 谢谢,如果我记录字符串“responseString”,我会得到一个大字符串,如果我记录字典,我会得到一个字典样式日志,那么如何确保数组进入字典?

标签: ios json dictionary key


【解决方案1】:

您从中获取该 JSON 字符串的 URL 为您提供了一个数组,而不是一个对象,即它看起来像:

[ { "foo1" : "bar1" }, { "foo2" : "bar2" },... ]

注意括号[ ]。在这种情况下,您的 JSON 解析器为您提供了一个 NSArray 作为顶级 (Objective-C) 对象。您需要一些逻辑,例如:

id results = [responseString JSONValue];
if ([results isKindOfClass: [NSArray class]])
{
    // probably iterate through whtever is in it
}
else if ([results isKindOfClass: [NSDictionary class]])
{
    // dictionary at the top level.  Hooray!
}
else
{
    // something went horribly wrong, deal with it.
}

【讨论】:

    【解决方案2】:

    这里的结果不是 NSDictionary 而是 NSArray。 NSArray 没有导致崩溃的 allKeys 选择器。如果您要发布有关您正在使用的 JSON 框架的更多信息,我们可以帮助您更好地解决问题

    【讨论】:

      【解决方案3】:

      发布的日志显示此调用 [responseString JSONValue] 返回 NSArray

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 1970-01-01
        相关资源
        最近更新 更多