将JSON字符串解析为对象数组Objective C
我有一个从restWeb服务请求返回的JSON字符串,我想将此字符串解析为确定类的对象Array,这是JSON字符串
[ { "validationCode": null, "FirstName": "Samer", "LastName": "Shame", "MobileNumber": "0991992993", "SimNumber": null, "Email": null, "PhoneNumber": "0991992994", "Name": "Abo Alshamat", "ID": 1 }, { "validationCode": null, "FirstName": "Ahmad", "LastName": "Ali", "MobileNumber": "0992993994", "SimNumber": null, "Email": null, "PhoneNumber": "0992993995", "Name": "AL-Kamal", "ID": 2 }, { "validationCode": null, "FirstName": null, "LastName": null, "MobileNumber": "0993377800", "SimNumber": null, "Email": null, "PhoneNumber": null, "Name": "Abo-MAhmoud", "ID": 12 }, { "validationCode": null, "FirstName": "William", "LastName": "Ammar", "MobileNumber": "0993994995", "SimNumber": null, "Email": null, "PhoneNumber": "0993994996", "Name": "Four Season", "ID": 3 }, { "validationCode": null, "FirstName": "Ammar", "LastName": "William", "MobileNumber": "0999555777", "SimNumber": null, "Email": null, "PhoneNumber": null, "Name": "uuuuu", "ID": 20 }, { "validationCode": null, "FirstName": null, "LastName": null, "MobileNumber": "0999888777", "SimNumber": null, "Email": null, "PhoneNumber": null, "Name": "NewOneFromI2", "ID": 18 }, { "validationCode": null, "FirstName": null, "LastName": null, "MobileNumber": "0999998997", "SimNumber": null, "Email": null, "PhoneNumber": "0999999998", "Name": "JOURY", "ID": 4 }, { "validationCode": null, "FirstName": null, "LastName": null, "MobileNumber": "202020", "SimNumber": null, "Email": null, "PhoneNumber": null, "Name": "TestTestRestaurant,Ammar,Hamed", "ID": 19 } ]
我想从中获取实例的类是:
@interface Restaurant : NSObject @property (nonatomic,strong) NSString *ID; @property (nonatomic,strong) NSString* FirstName; @property (nonatomic,strong) NSString* LastName; @property (nonatomic,strong) NSString* MobileNumber; @property (nonatomic,strong) NSString* simNumber; @property (nonatomic,strong) NSString* PhoneNumber; @property (nonatomic,strong) NSString* Name; @end
这样做的最佳方式是什么,对不起,问题可能来自基础知识,但我是客观C的新手
感谢您的时间。
我建议为您的Restaurant
类实现init方法。
-(instancetype) initWithParameters:(NSDictionary*)parameters { self = [super init]; if (self) { //initializations _validationCode = parameters[@"validationCode"]; // may be NSNull _firstName = [parameters[@"FirstName"] isKindOfClass:[NSNull class]] ? @"" : parameters[@"FirstName"]; ... } return self; }
注意:你可能有JSON Null的事实,使你的初始化有点复杂。 当相应的JSON值为Null时,您需要决定如何初始化属性。
您的parameters
字典将是您从服务器获得的JSON数组中的第一级字典。
首先,创建一个JSON表示,即JSON中的NSArray对象:
NSError* localError; id restaurantsObjects = [NSJSONSerialization JSONObjectWithData:data options:0 error:&localError];
IFF这没有失败,你的restaurantsObjects
现在应该是一个NSArray
对象,包含餐馆作为NSDictionary
s。
现在,将直接创建一个NSMutableArray
,它将填充Restaurant
对象:
NSMutableArray* restaurants = [[NSMutableArray alloc] init]; for (NSDictionary* restaurantParameters in restaurantsObjects) { Restaurant* restaurant = [Restaurant alloc] initWithParameters: restaurantParameters]; [restaurants addObject:restaurant]; }
最后,您可以在某个控制器中设置一个属性restaurants
:
self.restaurants = [restaurants copy];
你的JSON有一系列的词典…首先将你的数据转换为NSArray。
NSError *jsonError = nil; NSArray *jsonArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&jsonError];
现在你有了一系列JSON字典迭代。
for (NSDictionary *dic in jsonArray){ // Now you have dictionary get value for key NSString *firstName = (NSString*) [dic valueForKey:@"FirstName"];//We are casting to NSString because we know it will return a string. do this for every property... }