iOS Swift中如何通过扩展处理JSON空值与空字符串?
在iOS Swift中批量检查并处理JSON的空字符串和Null值
嘿,我完全懂你现在的困扰——要处理上百个JSON字符串字段,逐个写判断逻辑不仅麻烦,还容易出错对吧?咱们可以通过封装通用工具方法的方式,一次性搞定所有空字符串、null甚至nil的情况,彻底告别重复代码。
先聊聊你当前代码的小问题
你现在分别处理空字符串和NSNull的逻辑虽然能工作,但有两个潜在隐患:
- 用
as! String强制解包,如果JSON字段的类型意外变化(比如本来是字符串突然变成数字),会直接导致崩溃 - 重复的判断逻辑写几百次,代码冗余度太高,后续维护起来特别头疼
解决方案:封装通用处理函数
咱们先写一个工具函数,把所有的判断逻辑都封装进去,不管是nil、NSNull还是空字符串,都统一替换成你需要的默认值:
func sanitizeJSONValue(_ value: Any?, defaultValue: String = "---") -> String { // 处理nil的情况 guard let unwrappedValue = value else { return defaultValue } // 处理JSON里的null(对应Swift里的NSNull) if unwrappedValue is NSNull { return defaultValue } // 处理空字符串 if let stringValue = unwrappedValue as? String { return stringValue.isEmpty ? defaultValue : stringValue } // 如果是其他类型(比如数字、布尔值),可以转成字符串返回,或者按你的需求调整 return String(describing: unwrappedValue) }
批量处理字段的用法
有了这个函数,你只需要列出来需要处理的字段列表,循环调用函数就行,完美适配你上百个字段的场景:
假设你要处理hostel_info里的所有字段,先定义字段列表:
let hostelFields = ["e_residence", "district", "bed_name", "month", "institution_name", "board", "reg_no"]
然后循环处理每个字段:
// 假设permanentCAddVarDictionary是你解析后的JSON字典 for field in hostelFields { let cleanedValue = sanitizeJSONValue(permanentCAddVarDictionary?[field]) self.permanentCAddDic.setValue(cleanedValue, forKey: field) // 如果是要给emergencyContactDic赋值,替换对应的字典即可 }
进阶:给字典写扩展,让代码更优雅
如果你想让调用更简洁,可以给Dictionary写一个扩展,这样代码看起来更清爽:
extension Dictionary where Key == String, Value == Any? { func sanitizedValue(forKey key: String, defaultValue: String = "---") -> String { guard let value = self[key] else { return defaultValue } if value is NSNull { return defaultValue } if let stringValue = value as? String { return stringValue.isEmpty ? defaultValue : stringValue } return String(describing: value) } }
使用的时候就可以直接这样写:
let districtValue = permanentCAddVarDictionary.sanitizedValue(forKey: "district") self.permanentCAddDic.setValue(districtValue, forKey: "district")
这样一来,不管你有多少个字段,都能快速处理,再也不用重复写判断逻辑啦!
内容的提问来源于stack exchange,提问作者Code92
相关产品推荐
相关产品推荐

