当前位置: 首页 > 面试题库 >

通过JSON序列化将[NSNull null]值存储在NSUserDefaults中,会导致意外的异常

太叔志尚
2023-03-14
问题内容

我有一个使用基于JSON的API的应用程序。作为JSON的一部分,通常将值设置为“ null”。这可能很常见:

{"data":["one","two","three"],"name":null,otherstuff:10}

最近,我尝试在NSUserDefaults中存储从JSON对象转换的杂项NSDictionary层次结构。不幸的是,如果有空数据,它将在IOS中转换为[NSNull
null]时引发异常。显然,这不能保存在首选项中。

我想知道以前是否有人为此工作过?我尝试添加一些逻辑以首先从JSON中删除所有空值,但成功率有限,但是似乎不建议在存储数据之前先对其进行修改。有没有更好的方法来解决这个问题?


问题答案:

我已经尝试了一些递归解决方案,但是它们往往很复杂并且不能很好地处理混合类型的内容。在最简单的层次上,这里是一个简单的示例,如果您对清洁有一个可预测的,平坦的响应,则该示例很好用。

NSMutableDictionary *dictMutable = [dict mutableCopy];
[dictMutable removeObjectsForKeys:[dict allKeysForObject:[NSNull null]]];


 类似资料:
  • 问题内容: 我想将Swift样式字符串数组保存到NSUserDefaults中,但是代码中的“ if”语句通常说returnValue始终为nil。 在稍后的代码中(iOS 8),我想使用“ food + = [” spaghetti“]添加新条目。 问题答案: 以下代码应帮助您解决问题: 但是,使用前面的代码,如果您设置,则会遇到问题,因为不会返回。为了避免这种情况,您可能更喜欢以下代码:

  • 使用Dropwizard框架构建API,我使用Jackson ObjectMapper遇到了这个反序列化问题。我同时使用Joda Time和Joda Money。对于JodaTime,定义JodaModule足以解决反序列化问题。但对于JodaMoney来说,JodaModule不足以解决反序列化问题(如果我错了,请纠正我)。因此,我为JodaTime保留了JodaModule,创建了JodaMo

  • Json序列化和Jdk序列化在存储、效率上的对比? 在之前学习Redis时,我了解的是Json序列化比原生Jdk更高效,占用空间更小,所以无脑选择Json序列化。 但是最近我在看Pig开源框架中Oauth2的时候,发现存入Token令牌居然是用的Jdk序列化方式,我很疑惑,于是自己再用Json的方式去存,看看到底会有什么区别。 结果发现Json方式占用空间比Jdk的大了很多(Jdk为17)。 我又

  • 本文向大家介绍将列的值存储到MySQL存储过程的变量中,包括了将列的值存储到MySQL存储过程的变量中的使用技巧和注意事项,需要的朋友参考一下 要声明变量,请在MySQL存储过程中使用DECLARE。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是创建存储过程并将上述表的列值存储在存储过程变量中的查询- 调用存储过程- 这

  • 我试图理解为什么下面的代码打印“我不应该被打印!!" try块中的代码抛出一个错误,当它的errorAction变量被设置为stop时,Ppowershell将执行相应的catch块。 在catch中,测试函数调用将失败(因为测试函数参数属性validateSet不包括“facdfsd”)并抛出明显不终止的异常:ParameterArgumentValidationError 我现在期望执行在测试

  • 我有一个问题,将时间值反序列化为本地时间-授予,我对Nodatime很陌生。我想导入一个web服务结果,它以“hh:mm”格式列出了一个时间。除非使用“hh:mm:ss.fff”格式的时间,否则会出现异常。是否有一种方法可以指定一个不同的模式并让“hh:mm”工作? 请看此代码 引发异常: