我正在将来自Web服务器的JSON格式数据映射到Objective C类(在Xcode中建模的NSManagedObjects,由Core Data处理)。对于Objective C类的每个属性,我需要:
现在,我正在为每个属性对此序列进行硬编码,因此每个属性都需要如下代码:
// dictObject is the JSON object converted into a NSDictionary,
// and person is the instance of the modeled class
if ([dictObject objectForKey:@"nameFirst"] &&
[dictObject objectForKey:@"nameFirst"] != [NSNull null]) {
person.nameFirst = [dictObject objectForKey:@"nameFirst"];
}
除了需要 lot 代码来处理各种类之外,这看起来很脆弱:任何名称更改(或语言本地化)都会导致映射失败。
必须有更好的方法......我缺少什么?
答案 0 :(得分:11)
要处理 NULL 值,请在NSDictionary上使用类别。我使用的类别如下:
<强>的NSDictionary + Utility.h 强>
#import <Foundation/Foundation.h>
@interface NSDictionary (Utility)
- (id)objectForKeyNotNull:(id)key;
@end
<强>的NSDictionary + Utility.m 强>
#import "NSDictionary+Utility.h"
@implementation NSDictionary (Utility)
- (id)objectForKeyNotNull:(NSString *)key {
id object = [self objectForKey:key];
if ((NSNull *)object == [NSNull null] || (CFNullRef)object == kCFNull)
return nil;
return object;
}
@end
从JSON字典中检索任何值,如下所示:
NSString *stringObject = [jsonDictionary objectForKeyNotNull:@"SomeString"];
NSArray *arrayObject = [jsonDictionary objectForKeyNotNull:@"SomeArray"];
答案 1 :(得分:10)
有一个名为RestKit的框架可以让你做到这一点。我没有对它进行过测试,但它似乎得到了一个活跃的公司的支持,并作为开源提供:http://restkit.org/
答案 2 :(得分:1)
作为RestKit的轻量级替代品,您可以尝试GoldenFleece,它使用受Jackson启发的约会配置模式在JSON和Objective-C对象之间进行转换。
免责声明:我是作者。