SBJson 解析后的执行 (__NSArrayM objectForKey:)

Posted

技术标签:

【中文标题】SBJson 解析后的执行 (__NSArrayM objectForKey:)【英文标题】:SBJson Execptions after parsing (__NSArrayM objectForKey:) 【发布时间】:2012-11-19 19:34:30 【问题描述】:

我在尝试使用 SBJson 解析 Json 时遇到了一些问题,我做了一些研究,但找不到有用的东西...

我关注了一些关于如何做到这一点的博客,但我仍然收到错误消息:“__NSArrayM objectForKey:”

这就是我要解析的 Json:


"result": [
    
        "authors": [
            "Eric Ries"
        ],
        "bc": 9780671607,
        "title": "Yeah",
        "urlImage": "www.yeah.hey",
        "description": "Hey..."
    
    ]

这是我正在使用的代码:

SBJsonParser *json;
NSDictionary *jsonResults;
NSError *jsonError;

json = [ SBJsonParser new ];

// Get result in a NSDictionary
jsonResults = (NSDictionary*) [ json objectWithString:output error:&jsonError ];

// Check if there is an error
if (jsonResults == nil) 
    NSLog(@"Erreur lors de la lecture du code JSON (%@).", [ jsonError localizedDescription ]);  
 else 
    NSDictionary *book = (NSDictionary *)[ jsonResults objectForKey:@"result"];
    NSArray *items = (NSArray *) [book objectForKey:@"title"];

错误:

-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7a2d390
2012-11-19 20:32:36.336 FMS[500:11f03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x7a2d390'
*** First throw call stack:
(0x2245012 0x16a3e7e 0x22d04bd 0x2234bbc 0x223494e 0x8c6a 0x36093 0xb39e83 0x2204376 0x2203e06 0x21eba82 0x21eaf44 0x21eae1b 0x219f7e3 0x219f668 0x8365c 0x2d6d 0x2c95)
libc++abi.dylib: terminate called throwing an exception
Current language:  auto; currently objective-c

并且通过使用 valueForKey 而不是 objectForKey

[book valueForKey:@"title"];

我明白了:

(
    "Yeah"
)

不仅仅是是的

而且我不想再次解析 ( "Yeah" ) 以至少得到是的...

【问题讨论】:

【参考方案1】:

您会收到该错误,因为“book”是一个数组,而不是字典。如果所有结果都像这样,那就是“书”只有一个外部对象。您可以将定义书的行更改为:

NSDictionary *book = [[ jsonResults objectForKey:@"result"] lastObject];

【讨论】:

以上是关于SBJson 解析后的执行 (__NSArrayM objectForKey:)的主要内容,如果未能解决你的问题,请参考以下文章

无法将“__NSArrayM”类型的值转换为“NSDictionary”

Facebook JSON 提要 - __NSArrayM insertObject:atIndex:]:对象不能为 nil

[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]

如何提取 __NSArrayM 中的每个元素?

集合 <__NSArrayM: 0x7fa1f2711910> 在枚举时发生了突变

在映射集合时快速获取异常“所需类型 = NSOrderedSet;给定类型 = __NSArrayM”