如何将JSON对象映射到Objective C类?

Dan*_*Dan 6 serialization json objective-c deserialization

我将JSON格式的数据从Web服务器映射到Objective C类(在Xcode中建模的NSManagedObjects,由Core Data处理).对于Objective C类的每个属性,我需要:

  1. 确定JSON对象中是否存在属性的键,
  2. 确定该键的值是否为空,并且
  3. 如果条件1和2为真,则将值传递给建模的类实例

现在,我正在为每个属性对这个序列进行硬编码,因此每个属性都需要如下代码:

// 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"];
}
Run Code Online (Sandbox Code Playgroud)

除了需要大量代码来处理各种类之外,这看起来很奇怪而且很脆弱:任何名称更改(或语言本地化)都会导致映射失败.

必须有一个更好的方法......我错过了什么?

Wol*_*urs 11

要处理NULL值,请在NSDictionary上使用类别.我使用的类别如下:

的NSDictionary + Utility.h

#import <Foundation/Foundation.h>


@interface NSDictionary (Utility) 
- (id)objectForKeyNotNull:(id)key;
@end
Run Code Online (Sandbox Code Playgroud)

的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
Run Code Online (Sandbox Code Playgroud)

从您的JSON字典中检索任何值,如下所示:

NSString *stringObject = [jsonDictionary objectForKeyNotNull:@"SomeString"];
NSArray *arrayObject = [jsonDictionary objectForKeyNotNull:@"SomeArray"];
Run Code Online (Sandbox Code Playgroud)


pok*_*tad 10

有一个名为RestKit的框架允许您这样做.我没有对它进行测试,但它似乎得到了一个活跃的公司的支持,可以作为开源来源:http://restkit.org/