parse JSON string into array of objects Objective C

18,099

Solution 1

I would suggest to implement an init method for your Restaurant class.

-(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;
}

Note: the fact that you may have JSON Nulls, makes your initialization a bit elaborate. You need to decide how you want to initialize a property, when the corresponding JSON value is Null.

Your parameters dictionary will be the first level dictionary from the JSON Array which you got from the server.

First, create a JSON representation, that is a NSArray object from the JSON:

NSError* localError;
id restaurantsObjects = [NSJSONSerialization JSONObjectWithData:data 
                                                        options:0 
                                                          error:&localError];

IFF this did not fail, your restaurantsObjects should now be an NSArray object containing the restaurants as NSDictionarys.

Now, it will be straight forward to create a NSMutableArray which will be populated with Restaurant objects:

NSMutableArray* restaurants = [[NSMutableArray alloc] init];
for (NSDictionary* restaurantParameters in restaurantsObjects) {
    Restaurant* restaurant = [Restaurant alloc] initWithParameters: restaurantParameters];
    [restaurants addObject:restaurant];
}

and finally, you may set a property restaurants in some controller:

self.restaurants = [restaurants copy];

Solution 2

Your JSON have An array of dictionaies... First convert your data to NSArray.

NSError *jsonError = nil;

NSArray *jsonArray = (NSArray *)[NSJSONSerialization JSONObjectWithData:jsonData options:nil error:&jsonError];

Now you have array of JSON dictionaries iterate.

  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...  
    }
Share:
18,099
Ammar
Author by

Ammar

Updated on June 21, 2022

Comments

  • Ammar
    Ammar almost 2 years

    I have a JSON String returned from rest web service request, I want to parse this string into Array of objects from determined class, this is the JSON string

    [
        {
            "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
        }
    ]
    

    the class I want to get instances from is:

    @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
    

    what is the best way to do that,excuse me maybe the question is from basic Knowledge but I am new to objective C

    thank you for your time.