尝试复制时 JSON Kit 参数无效

Posted

技术标签:

【中文标题】尝试复制时 JSON Kit 参数无效【英文标题】:JSONKit invalid arguement when try to copy 【发布时间】:2013-02-12 00:36:29 【问题描述】:

我正在使用 JSONKit 作为 NSMutableDictionary 解析 JSON 数据。

NSString *str = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];

NSMutableDictionary *jsonResponse = [self.responseData objectFromJSONData];

NSMutableDictionary *newData = [[NSMutableDictionary alloc] init];
[newData addEntriesFromDictionary:[jsonResponse mutableCopy]];

当我这样做时,我得到了这个错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableDictionary addEntriesFromDictionary:]: dictionary argument is not an NSDictionary'

我正在尝试找出导致此问题的原因。根据我的其他经验,我知道 jsonResponse 是 JKArray 的一个对象。

我需要帮助。 谢谢。

【问题讨论】:

【参考方案1】:

尝试以下方法:

id object = [self.responseData objectFromJSONData];
NSLog(@"%@", [object class]);

您的响应很可能是一个数组而不是字典。


如果你真的想把数组转换成字典,你可以这样做,使用自定义键:

NSArray *array = [self.responseData objectFromJSONData];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObject:array forKey:@"posts"];

如果你能告诉我你的数组的内容,也许有一些更好的选择。

【讨论】:

响应是 JKArray,就像我之前说的那样。 嗯,那就是问题所在,不能直接将数组转换成字典。你想通过将数据放入字典来达到什么目的? 问题是我编写的每个代码都使用字典方法,例如 [[[self.eventList valueForKeyPath:@"picture"] valueForKeyPath:@"url"] objectAtIndex:indexPath.row];他们成功地工作,但是当我尝试复制它时,它开始像数组一样工作并且不起作用。我不知道如何实现这一目标。我只想从服务器检索最近的帖子并将其添加到我的数据中。 听起来你可以从 review 的哈希表(这就是 NSDictionary 是什么)和数组(如 NSArray)之间的差异中受益。网上有很多关于“数组数据结构”和“哈希表数据结构”的谷歌搜索结果,所以请选择文章和博客来阅读——我链接到上面比较这两种结构的一篇文章。

以上是关于尝试复制时 JSON Kit 参数无效的主要内容,如果未能解决你的问题,请参考以下文章

cudaMemcpy 无效参数

iPhone Store Kit 返回无效产品 ID 错误

复制 json 文件时出现 Amazon Redshift 错误 - JSONPath 格式无效:成员不是对象

尝试将元数据添加到对象时,AWS S3 管道中的“无效 JSON”

为啥我在 Laravel 中为 foreach 提供无效的参数以进行 json 响应?

Json Serializable - 无效参数(输入):不能为空