我们说我有一个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];
}
}
答案 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];
这也适用于复杂的数据结构。