一组对Foundation对象进行分类的集合,简化了您在解析JSON对象时的工作。
使用JSON的典型工作流程如下所示
NSError *error = nil;
NSData *JSONData = [self populateJSONData];
id JSONObject = [NSJSONSerialization JSONObjectWithData:JSONData options:0 error:&error];
Class expectedClass = [NSDictionary class];
if ([JSONObject isKindOfClass:expectedClass]) {
[self processJSONDictionary:(NSDictionary *)JSONObject];
}
您看?所有的代码都散布着-isKindOfClass:
。这防止了当JSON数据稍微变化时程序崩溃。然而,在一个以JSON为主的程序中,这些类型转换操作会产生大量的无谓的噪音,您无法流畅地阅读代码。
这就是为什么创建了JSON Safe。您可以安全地处理您的JSON
// produces NSDictionary or nil if there was no NSDictionary parsed
NSDictionary *JSONDict = [JSONObject mr_toDictionary];
以下任意JSON对象的转换都受到支持
NSNull
始终转换为nil
,无论您尝试得到什么:NSString
、NSNumber
、NSArray
还是NSDictionary
。
尝试将NSNumber
转换为NSNumber
将产生相同的对象。转换为NSString
— 调用-[NSNumber stringValue]
。转换为NSArray
— 产生包含接收者的NSArray
。转换为NSDictionary
— nil
。
使用NSString
也会有类似的情况
NSString
→ NSString
给出相同的对象NSNumber
使用带有小数分隔符设置为.
的NSNumberFormatter
NSArray
产生@[ self ]
NSDictionary
返回nil
与NSArray
和NSDictionary
相关的操作有点棘手。以下是NSArray
的转换规则
NSArray
到NSString
给出数组的concatenated\n\content\nof\nthe\narray
NSNumber
结果是nil
NSArray
产生self
NSDictionary
— nil
最后是NSDictionary
nil
NSArray
产生@[ self ]
NSDictionary
— self
该项目使用一系列类似文档的测试进行测试。请检查tests/
目录。
将以下行添加到您的Podfile
pod 'MRJSONSafe'
然后运行pod install
。
或者如果您不使用CocoaPods,可以直接将src/MRJSONSafe.h
和src/MSJSONSafe.m
复制到您的项目中。
原始想法是由Michael Efimov在为iPhone的Yandex.Search应用工作时开发的。目前该项目由Roman Busyghin维护。
想要做出改变吗?克隆仓库,编写代码、测试和文档后提交拉取请求。
MRJSONSafe采用MIT许可证。更多信息请参阅LICENSE文件。