如何在Xcode中从JSON获取自定义对象?

时间:2014-12-08 07:39:24

标签: ios objective-c json xcode

我们说我有一个NSObject班级人员。

@interface Person : NSObject

@property NSString *id;
@property NSString *name;
@property Address *billingAddress;
@end


@interface Address : NSObject

@property NSString *lane;
@property NSString *country;
@property NSString *zip;
@end

现在,当我从URL获取响应时,响应的格式为:

 {
  "response":
  {
  "Persons":[{"id":"2232","name":"John","Address":{"lane":"Adelaide Avenue","country":"Canada","zip":"45503"}}{"id":"3422","name":"Jane","Address":{"lane":"Victoria Avenue","country":"Australia","zip":"34903"}}]
  }
}

我想直接将响应解析为对象,而不必编写方法来从NSDictionary读取和分配对象。是否没有对象可以根据类似于Android中“GSon”的Object参数直接从对Object的响应进行解析。

编辑:

我已经使用下面的代码来创建通用类来完成字符串的工作,而不必知道对象本身。

for (NSString *key in [dct allKeys]) { 
    if ([cat respondsToSelector:NSSelectorFromString(key)]) { 
           [cat setValue:[dct valueForKey:key] forKey:key]; 
    } 
 }

2 个答案:

答案 0 :(得分:1)

没有这样的魔力,即使在Android的GSon中也没有!

您需要编写用于将JSON转换为对象的代码。

您可以创建一个通用类或一个方法(只需一次)将所有字典值转换为您的对象。

答案 1 :(得分:0)

经过一番挖掘后,我确实得到了一个完全符合我想要的JSON框架 - JSONModel

我们只需要指定模型和关系,所有用于将JSON响应转换为模型的逻辑都由框架处理。非常方便。

基本用法: 考虑您有JSON响应,例如

{"id":"10", "country":"Germany", "dialCode": 49, "isInEurope":true}

相应的模型将是

#import "JSONModel.h" 

@interface CountryModel : JSONMode 
@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* country;
@property (strong, nonatomic) NSString* dialCode;
@property (assign, nonatomic) BOOL isInEurope;

@end

我们不需要在.m文件中编写其他代码来解析并为变量赋值。现在从响应中初始化模型我们只需要执行以下操作

NSString* json = (fetch JSON here)
NSError* err = nil;
CountryModel* country = [[CountryModel alloc] initWithString:json error:&err];

这也适用于复杂的数据结构。