Saturday, 7 September 2013

How to encode json response and write it in array?

How to encode json response and write it in array?

I am using AFJSONRequestOperation to obtain the list of my friends. Here's
the request:
/// get friends
NSString *str = [NSString
stringWithFormat:@"https://api.vk.com/method/friends.get?fields=first_name,last_name&uid=%@&access_token=%@",
user_id, secret];
NSURL *url = [[NSURL alloc] initWithString:str];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request success:^(NSURLRequest
*request, NSHTTPURLResponse *response, id JSON) {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:JSON
options:NSJSONWritingPrettyPrinted
// Pass 0 if
you don't care
about the
readability of
the generated
string
error:&error];
if (! jsonData) {
self.friendsList.hidden = YES;
NSLog(@"Got an error: %@", error);
} else {
NSString *jsonString = [[NSString alloc]
initWithData:jsonData
encoding:NSUTF8StringEncoding];
NSLog(@"JSON: %@", jsonString);
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response,
NSError *error, id JSON) {
NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
}];
[operation start];
NSLog's output looks like this:
"response" : [
{
"user_id" : 3468700,
"uid" : 3468700,
"first_name" : "Þëåíüêà",
"last_name" : "Êàëþæíàÿ",
"online" : 0
},
{
"user_id" : 3870082,
"uid" : 3870082,
"first_name" : "Ìèõàèë",
"last_name" : "Õàëåöêèé",
"online" : 0
},
{
"user_id" : 4080134,
"uid" : 4080134,
"first_name" : "Ìàðèÿ",
"last_name" : "Êàðàâàåâà",
"online" : 0
},
{
"user_id" : 4943555,
"uid" : 4943555,
"first_name" : "Þñ¸íîê",
"last_name" : "Ëàð÷åíêî",
"online" : 0
},
{
"user_id" : 5012692,
"uid" : 5012692,
"first_name" : "Âÿ÷åñëàâ",
"last_name" : "Òàðàáóøêèí",
"online" : 0
},
{
"user_id" : 5036666,
"uid" : 5036666,
"first_name" : "Âëàäèñëàâ",
"last_name" : "Ðàñòåãàåâ",
"online" : 0
}
The problem is that json response is a line and I can't address elements
of the massive. Are there any chances to turn json response into a
massive? I have tried replacing
NSString *jsonString = [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding]; for
NSArray *ar = [[NSArray alloc] initWithObjects:jsonData, nil];
and as the result NSLog shows the following:
(<7b0a2020 22726573 706f6e73 6522203a 205b0a20 2020207b 0a202020 20202022
75736572 5f696422 203a2033 34363837 30302c0a 20202020 20202275
69642220 3a203334 36383730 302c0a20 20202020 20226669 7273745f 6e616d65
22203a20 22d0aed0 bbd0b5d0 bdd18cd0 bad0b022 2c0a2020 20202020 226c6173
745f6e61 6d652220 3a2022d0 9ad0b0d0 bbd18ed0 b6d0bdd0 b0d18f22 2c0a2020
20202020 226f6e6c 696e6522 203a2030 0a202020 207d2c0a 20202020 7b0a2020
20202020 22757365 725f6964 22203a20 33383730 3038322c 0a202020 20202022
75696422 203a2033 38373030 38322c0a>)
I have also tried this variant:
NSArray *dataDictionary = [NSJSONSerialization JSONObjectWithData:JSON
options:0 error:&error];
NSLog(@"%@", dataDictionary);
but the app tends to shut down telling there is an error:
[__NSCFDictionary bytes]: unrecognized selector sent to instance 0x7527ad0
Any help would be appreciated. Thanks in advance

No comments:

Post a Comment