ios - 将对象添加到 JSONKit 创建的字典?

标签 ios parsing nsdictionary nsmutabledictionary jsonkit

在我的项目中,我必须加载一些 json 文件。我用 JSONKit 解析它们,并在每次解析后使用

NSMutableDictionary *json = [myJSON objectFromJSONString]; 

我将它们添加到一个数组中,例如:
[self.themeArray addObject:json];

到目前为止,这工作正常。现在我需要在 View 之间传递字典。到目前为止也可以,但是我需要向字典 object-> json 添加更多对象。即使我将 json 声明为 NSMutableDictionary,它也不允许我添加对象,因为 JSONKit 解析器似乎创建了非可变字典。

我正在考虑创建一个并排包含 json 字典和我的附加数据的对象,这样我就不必更改 json 字典。我什至可以将其更改为 NSDictionary,因为无需更改它。但这对我来说似乎并不优雅。

您知道如何在不更改 JSONKit 库的情况下解决此问题吗?

提前致谢!

编辑

我刚刚尝试将我的代码更改为
NSMutableDictionary *json = [[myJSON objectFromJSONString] mutableCopy];

像这样的东西
[[self.theme objectForKey:@"theme"]  setObject:sender forKey:@"sender"];
[[self.theme objectForKey:@"theme"]  setValue:sender forKey:@"sender"];

Xcode 抛出异常:

* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“* -[JKDictionary setObject:forKey:]: 变异方法发送到不可变对象(immutable对象)'

我认为这是由于上级词典中仍然存在嵌套词典。然后我将不得不通过我的 json 对象进行交互以将所有字典复制到可变字典,对吗?

也许最好按照 Guillaume 的建议切换到 NSJSONSerialization。

编辑

我刚尝试过这样的事情
[self.theme  setValue:sender forKey:@"sender"];

它现在有效!正如我所认为的那样。只有 json 对象被复制到可变对象。对你来说可能很明显,对我来说不是。

感谢大家的帮助!

编辑

最后,在我无法将字典数据深处的所有对象更改为可变对象之后,我再次更改了代码。我扔掉了 JSONKit,现在使用 NSJSONDeserialization 作为推荐,这里有 NSJSONReadingMutableContainers 选项。我的代码现在看起来像这样,所有容器(数组和字典)在内部也是可变的。这让我高兴! ;-)
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:myJSON options:NSJSONReadingMutableContainers error:&jsonParsingError];

最佳答案

您始终可以通过复制对象的非可变副本来创建对象的可变版本。

NSMutableDictionary* json = [[myJSON objectFromJSONString] mutableCopy];

这不是最佳的,但是从性能的角度来看,复制较小的字典通常并不明显。

关于ios - 将对象添加到 JSONKit 创建的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12912703/

相关文章:

ios - 如何在 Swift 2.0 中将 [String : String?] 转换为 [NSObject : AnyObject]! for Firebase Api?

java - 除文件路径外,按空格分割字符串

ios - 在 NSDictionary 中知道其中一个键值时获取其他键值

ios - 从 Json 向 NSObject 存储值

ios - 如何在NSMutableDictionary中比较NSArray的元素?

ios - 解析请求与刷新

ios - 在iOS上运行Flutter项目时出现重新定义错误

ios - iOS 6.0 以下设备的广告标识符

python - 嵌套 json 的 .get 方法不起作用

java - 为大型项目选择解析技术