我正在编写代码,以如下方式解析json响应:
NSDictionary* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (jsonArray == nil) {
// returns empty array
return layouts;
}
NSDictionary* sections = [jsonArray valueForKey:@"section"];
for (NSDictionary* section in sections) {不幸的是,“节”有时是空的,我的结果是一个__NSArrayI *,它包含一个元素- NSNull *。这将导致for循环在异常情况下失败。我怎么才能修好它?
发布于 2016-02-17 17:29:47
我以前在NSDictionary扩展上有一个清理方法,它帮助我解决了这个问题。基本上,该方法遍历字典中的所有键,删除与NSNull()匹配的任何值,返回一个“干净”的字典和数组。诀窍是,您还必须通过嵌套字典进行递归。所以,在伪代码中,它看起来如下所示:
func cleanup() -> NSDictionary {
let newDictionary = NSDictionary()
for key in dictionary.copy {
if dictionary[key] is NSDictionary {
newDictionary[key] = dictionary[key].cleanup()
} else if dictionary[key] is NSArray {
newDictionary[key] = dictionary[key].filter( $0 != NSNull() )
} else if dictionary[key] != NSNull() {
newDictionary[key] = dictionary[key]
}
return newDictionary
}希望这能有所帮助!
发布于 2016-02-17 21:09:51
只需将此函数添加到解析器并调用它即可。
- (id)objectForKeyNotNull:(NSString*)key inDict:(NSDictionary*)map {
id object = [map objectForKey:key];
if (object == [NSNull null])
return nil;
else
return object;
}然后,您可以在解析器中这样调用它:
// will set myObject to nil if it is null in the JSON response
myObject = [self objectForKeyNotNull:@"keyNameInDict" inDict:yourDictionary]; https://stackoverflow.com/questions/35463496
复制相似问题