NSJSONSerialization
によって作成されたデータ構造をディスクにキャッシュする必要があることがよくありますが、null があると-writeToFile
失敗するため、構造が不明な場合に機能する修正が必要です。これは機能し、NSMutableDictionary 自体のインスタンスが列挙されていないため、直接の変更が許可されますが、少しハッキーな感じがします。
これはまったく問題ありませんか、それとも新しいツリーを再作成して返すことが絶対に必要ですか?
- (void) removeNullsFromJSONTree:(id) branch
{
if ([branch isKindOfClass:[NSMutableArray class]])
{
//Keep drilling to find the leaf dictionaries
for (id childBranch in branch)
{
[self removeNullsFromJSONTree:childBranch];
}
}
else if ([branch isKindOfClass:[NSMutableDictionary class]])
{
const id nul = [NSNull null];
const NSString *empty = @"";
for(NSString *key in [branch allKeys])
{
const id object = [branch objectForKey:key];
if(object == nul)
{
[branch setObject:empty forKey:key];
}
}
}
}