Ali
Ali

Reputation: 1

how to parse JSON data and show content in iphone app

I want that the object which are coming in array how to store them in object like when i use like

myArray.id=
myArray.name=

so it shuls show values

SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.krsconnect.no/community/api.html?method=categories&appid=620&mainonly=true"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];
NSArray *results = [parser objectWithString:json_string error:nil];

Upvotes: 0

Views: 6148

Answers (4)

Alex Cio
Alex Cio

Reputation: 6052

There are some things you have to look at when calling data from json, but its quite easy. First of all you should add these two lines at the top of you m-file:

#define kAsyncModus dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define kYourJsonURL [NSURL URLWithString: @"_THE_JSON_URL_"]

then, insert following part into your viewDidLoad method. "dispatch_async" has to be used with the previous defined macro (at the top) so you create a thread. Otherwise your app could crash if maybe there is no response from the server but the method keeps waiting for it.

// get elements of json
dispatch_async(kAsyncModus, ^{
    NSData *data = [NSData dataWithContentsOfURL: kYourJsonURL];
    [self performSelectorOnMainThread:@selector(fetchedData:)
                           withObject:data
                        waitUntilDone:YES];
});       

and create a new method that will get single elements out of the received json

- (void)fetchedData:(NSData *)responseData{
    NSError *error;
    NSDictionary *json =
    [NSJSONSerialization JSONObjectWithData:responseData
                                    options:kNilOptions
                                      error:&error];

    NSArray *results = [json objectForKey:@"_firstElementInJsonFile_"];


    NSLog(@"Results: %@", results);

}

for more detailes information you use the results

NSDictionary *specificData = [results objectAtIndex:0];

and it should be done.

I just explained it in the shortest way, if you want to have all facts look at following tutorial. But I'm not sure, if there is support for older devices that use < iOS5. I couldn't test it till know. If you need something like this, maybe you can look at JSONKit on Git. Maybe there is somebody who knows these detailes, would be interesting to know for me too.

Upvotes: 1

Keller
Keller

Reputation: 17081

The json-framework is the way to go.

However, this JSON is not valid. Tell whoever is providing the API to ensure their JSON returns are valid.

Upvotes: 0

werner
werner

Reputation: 859

There is a great tutorial on how to parse JSON by Matt Gallagher here. Hope that gets you started in the right direction.

The following should display results for your code/JSON :

// Get JSON as a NSString from NSData response
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];

// the JSON response is an Array
NSArray *results = [parser objectWithString:json_string error:nil];
NSDictionary *dictOne = [results objectAtIndex:0];
NSArray *activitiesArray = [dictOne objectForKey:@"activities"];
NSDictionary *dictTwo = [activitiesArray objectAtIndex:0];
NSDictionary *eventDict = [dictTwo objectForKey:@"event"];

NSLog(@"%@ - %@", [eventDict objectForKey:@"category"]);

Upvotes: 2

Dad
Dad

Reputation: 6478

JSONKit makes this pretty easy, might be worth considering. And its very fast.

Upvotes: 0

Related Questions