bapi
bapi

Reputation: 1943

Inserting JSON array into Sqlite iPhone

I'm getting JSON data like following in a NS array:

It seems this is not valid JSON

jsonArray:
{
    d = "[{\"Training_Code\":\"1234      \",\"Training_Duration\":\"2hrs      \",\"Training_Startdate\":\"14/02/2013 15:00:00\",\"Training_Enddate\":\"14/02/2013 17:00:00\",\"Trainer_ID\":1,\"Training_Location\":\"B-Wing Training room-4\",\"Comments\":\"C# training\",\"Keyword\":\"C#1234\",\"NumberofDays\":1},{\"Training_Code\":\"4321      \",\"Training_Duration\":\"16        \",\"Training_Startdate\":\"17/02/2013 10:30:00\",\"Training_Enddate\":\"17/02/2013 17:30:00\",\"Trainer_ID\":2,\"Training_Location\":\"A-Wing Training Room-6\",\"Comments\":\"Objective-C\",\"Keyword\":\"Obj-C4321\",\"NumberofDays\":2}]";
}

I want to change this to valid json like this:

[
{
    "Training_Code": "1234",
    "Training_Duration": "2hrs",
    "Training_Startdate": "14/02/201315: 00: 00",
    "Training_Enddate": "14/02/201317: 00: 00",
    "Trainer_ID": 1,
    "Training_Location": "B-WingTrainingroom-4",
    "Comments": "C#training",
    "Keyword": "C#1234",
    "NumberofDays": 1
},
{
    "Training_Code": "4321",
    "Training_Duration": "16",
    "Training_Startdate": "17/02/201310: 30: 00",
    "Training_Enddate": "17/02/201317: 30: 00",
    "Trainer_ID": 2,
    "Training_Location": "A-WingTrainingRoom-6",
    "Comments": "Objective-C",
    "Keyword": "Obj-C4321",
    "NumberofDays": 2
}

]

Note: I do not know, from where this "d" is comming...Plaese suggest keeping this in mind.

How can I change to valid json and insert this in my Sqlite DB? Thanks.

Upvotes: 0

Views: 2905

Answers (3)

khose
khose

Reputation: 763

You can always inset it as plain text. If you want to manipulate JSON Strings, I recommend this. You can transform that String into a JKArray (which is the same than an Array). After that, iterate through your array and do your DB stuff (inserting into your table...)

Am I missing something? Maybe I need more info about what you want to do...

Upvotes: 2

βhargavḯ
βhargavḯ

Reputation: 9836

Parse your json using NSJSONSerialization and insert into database by mapping keys with your columns.

    NSString *str = [[NSString alloc] initWithString:@"[{\"Training_Code\":\"1234      \",\"Training_Duration\":\"2hrs      \",\"Training_Startdate\":\"14/02/2013 15:00:00\",\"Training_Enddate\":\"14/02/2013 17:00:00\",\"Trainer_ID\":1,\"Training_Location\":\"B-Wing Training room-4\",\"Comments\":\"C# training\",\"Keyword\":\"C#1234\",\"NumberofDays\":1},{\"Training_Code\":\"4321      \",\"Training_Duration\":\"16        \",\"Training_Startdate\":\"17/02/2013 10:30:00\",\"Training_Enddate\":\"17/02/2013 17:30:00\",\"Trainer_ID\":2,\"Training_Location\":\"A-Wing Training Room-6\",\"Comments\":\"Objective-C\",\"Keyword\":\"Obj-C4321\",\"NumberofDays\":2}]"];

    NSError *jsonError = nil;
    id allValues = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding]
                                                   options:0
                                                     error:&jsonError];

    if(jsonError!=nil)
        InfoLog(@"error: %@",jsonError);

    NSArray *result = (NSArray*)allValues;

    for(int i=0;i<[result count];i++)
    {
            NSDictionary *values = (NSDictionary*)[result objectAtIndex:i];
            NSLog(@"Training_Code: %@  Training_Duration: %@",[values objectForKey:@"Training_Code"],[values objectForKey:@"Training_Duration"]);
    }

Now you are able to get values from NSDictionary and then simply add in your database.

Upvotes: 0

Marcelo Cantos
Marcelo Cantos

Reputation: 185962

That's a string containing an encoded JSON array. You need to use a JSON decoder (batteries included as of iOS 5) to convert it into an NSArray, then walk it:

The following (untested) code should be about right:

// Assuming jsonArray is an object with an NSString property, d...
NSData *data = [jsonArray.d dataUsingEncoding:NSUTF8StringEncoding];

NSError *err;
NSArray *d = [NSJSONSerialization JSONObjectWithData:data options:0 error:err];
// Check for errors.
for (NSDictionary *row in d) {
    NSString *trainingCode = [row objectForKey:@"Training_Code"];
    …
    // Insert into SQLite here.
}

Note that, in recent versions of Xcode, you can write row[@"Training_Code"] instead of [row objectForKey:@"Training_Code"].

Upvotes: 0

Related Questions