バックグラウンドから返されるnullの除去
3410 ワード
バックグラウンドで返されるデータフォーマットは過去のjsonとxmlが併存する時代から、現在のjsonを主とし、xmlがほとんど存在しない年代になった.jsonはモバイルエンドプログラム猿ごとにインタフェースと付き合うたびに遭遇するデータフォーマットであり、この過程で良いインタフェース戻りフォーマットは良いが、いくつかの特例を排除することはできない.インタフェースフィールドにnullがある場合.
例
このようなデータの返却は、開発者を悩ませるに違いない.この時、厳密には正しいデータセグメントだが、私たちが望んでいるものではない.nullを空に変換する方法で解決することができる.
単純なjsonフォーマットであれば、複雑な配列、辞書は含まれません.次の方法で変換できます(有効性が検証されています)
}
フィールドに配列や辞書などの複雑なフォーマットが含まれている場合は、次の修復を行うことができます(テストがなく、変更が必要な場合があります.参照のみ).
例
{ "userName": null,
"userImage":null,
"token":null}
このようなデータの返却は、開発者を悩ませるに違いない.この時、厳密には正しいデータセグメントだが、私たちが望んでいるものではない.nullを空に変換する方法で解決することができる.
単純なjsonフォーマットであれば、複雑な配列、辞書は含まれません.次の方法で変換できます(有効性が検証されています)
- (NSDictionary*)transforeNullValueInSimpleDictionaryToBlankString:(id)originJson{
// originJson
if (![NSJSONSerialization isValidJSONObject:originJson]) {
return nil;
}
NSDictionary *originDic = (NSDictionary*)originJson;
NSMutableDictionary *translatedDic = [NSMutableDictionary dictionary];
[originDic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:[NSNull class]]) {
[translatedDic setObject:@"" forKey:key];
}else{
[translatedDic setObject:obj forKey:key];
}
return translatedDic;
}
フィールドに配列や辞書などの複雑なフォーマットが含まれている場合は、次の修復を行うことができます(テストがなく、変更が必要な場合があります.参照のみ).
- (NSDictionary*)transforeNullValueInDictionaryToBlankString:(id)originJson{
// originJson
if (![NSJSONSerialization isValidJSONObject:originJson]) {
return nil;
}
NSDictionary *originDic = (NSDictionary*)originJson;
NSMutableDictionary *translatedDic = [NSMutableDictionary dictionary];
[originDic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
BOOL isNull = NO;
BOOL isArray = NO;
BOOL isDic = NO;
if ([obj isKindOfClass:[NSNull class]]) {
[translatedDic setObject:@"" forKey:key];
isNull = YES;
}
if ([obj isKindOfClass:[NSArray class]]) {
NSMutableArray *tempArray = [NSMutableArray array];
for (id __strong content in obj) {
if ([content isKindOfClass:[NSNull class]]) {
[tempArray addObject:@""];
}
if ([content isKindOfClass:[NSArray class]]) {
[tempArray addObject: [self transformNullValueInArrayToBlankString:content]];
}
}
[translatedDic setObject:tempArray forKey:key];
isArray = YES;
}
if ([obj isKindOfClass:[NSDictionary class]]) {
NSDictionary *tempDic;
tempDic = [self transforeNullValueInDictionaryToBlankString:obj];
isDic = YES;
[translatedDic setObject:tempDic forKey:key];
}
if (isNull || isArray || isDic) {
}else{
[translatedDic setObject:obj forKey:key];
}
}];
return translatedDic;
}
- (NSArray*)transformNullValueInArrayToBlankString:(NSArray*)originArray{
NSMutableArray *tempArray = [NSMutableArray array];
for (id __strong content in originArray) {
if ([content isKindOfClass:[NSNull class]]) {
[tempArray addObject:@""];
}
if ([content isKindOfClass:[NSDictionary class]]) {
[tempArray addObject:[self transforeNullValueInDictionaryToBlankString:content]];
}
if ([content isKindOfClass: [NSArray class]]) {
[tempArray addObject:[self transformNullValueInArrayToBlankString:content]];
}
}
return (NSArray*)tempArray;
}