2013-03-21 2 views
0

Я использую Parse.com как бэкэнд моего приложения, где я в настоящее время храню данные там.NSJSONSerialization данные в другом формате

Данные представляют собой список игровых консолей. Я смог сделать вывод из него, но вместо данных JSON вывод является большим NSMutableArray.

Это мой viewDidLoad:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString:@"https://api.parse.com/1/classes/Consoles"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setURL:url]; 
    [request setHTTPMethod:@"GET"]; 
    [request setValue:@"APPLICATION_ID" forHTTPHeaderField:@"X-Parse-Application-Id"]; 
    [request setValue:@"REST_API_KEY" forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 

    NSError *error; 

    id listOfConsoles = [NSJSONSerialization JSONObjectWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil] options:NSJSONReadingMutableContainers error:&error]; 

    NSLog(@"The list: %@", listOfConsoles); 
} 

Выход:

The list: { 
    results =  (
       { 
      createdAt = "2013-03-21T07:26:04.149Z"; 
      name = PlayStation; 
      objectId = vloIK0MZIA; 
      updatedAt = "2013-03-21T07:26:04.149Z"; 
     }, 
       { 
      createdAt = "2013-03-21T07:26:34.209Z"; 
      name = Wii; 
      objectId = RIRpgbznlq; 
      updatedAt = "2013-03-21T07:26:34.209Z"; 
     }, 
       { 
      createdAt = "2013-03-21T07:26:39.391Z"; 
      name = Xbox; 
      objectId = xBNgHtJbrV; 
      updatedAt = "2013-03-21T07:26:39.391Z"; 
     } 
    ); 
} 

То, что я хочу выход быть:

{ 
    "results" : [ 
    { 
     "objectId" : "vloIK0MZIA", 
     "updatedAt" : "2013-03-21T07:26:04.149Z", 
     "createdAt" : "2013-03-21T07:26:04.149Z", 
     "name" : "PlayStation" 
    }, 
    { 
     "objectId" : "RIRpgbznlq", 
     "updatedAt" : "2013-03-21T07:26:34.209Z", 
     "createdAt" : "2013-03-21T07:26:34.209Z", 
     "name" : "Wii" 
    }, 
    { 
     "objectId" : "xBNgHtJbrV", 
     "updatedAt" : "2013-03-21T07:26:39.391Z", 
     "createdAt" : "2013-03-21T07:26:39.391Z", 
     "name" : "Xbox" 
    } 
    ] 
} 

КСТАТИ

Почему, когда у меня есть отдельный NSData в коде:

NSData *JSONData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

И изменить NSJSONSerialization к:

id listOfConsoles = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableContainers error:&error];

Выход будет:

The list: { 
    error = unauthorized; 
} 
+0

По какой-либо причине вы не используете SDK от Parse iOS? –

+0

Ничего особенного. Недавно я просто встретился с Parse.com и по-своему использовал его SDK. – Jahm

ответ

1

Первый список - NSDictionary с одним ключом, который называется «результаты», который имеет NSArray из NSDictionaries.

Второй список это то же самое ..

Edit 1,0:

Просто для уточнения, то второй выход JSON, ок? Просто так, просто проверьте here и подтвердите себя. Первый - это выведенный JSON, который находится внутри NSObject. Конечно, будут небольшие различия ...

+0

Я вижу, но почему первый вывод не совпадает со вторым? Как я получу второй выход? – Jahm

+0

Вы полагаетесь на 'NSLog', а не на то, что, как вы знаете, оно будет там. Я могу привести вам пример: я знаю наизусть, что у службы JSON у меня есть строки типа «1233». Дело в том, что после 'NSJSONSerialization'I есть' NSNumbers' вместо 'NSStrings'. Поэтому я просто делаю' stringValue', и это все ... – Peres

+0

В качестве меры предосторожности я копирую результат и вставляю его в онлайн-проверку подлинности JSON и проверить правильность JSON или нет. Первый - нет, однако второй. – Jahm

0

Ваша аутентификация не выполнена успешно. Пожалуйста, проверьте APPLICATION_ID и REST_API_KEY значений.

+0

Если аутентификация не удалась, почему у меня есть первый вывод? – Jahm

+0

, пожалуйста, сообщите мне точный шаг, когда вы получите ответ, и когда вы получите список: { error = unauthorized; } – Yashesh

+0

Я получу 'error = unauthorized', если у меня есть отдельная строка для ** NSData ** и вручную вызывается внутри ** NSJSONSerialization **. Однако я могу сгенерировать вывод, если у меня не будет отдельной строки для ** NSData **. – Jahm

0

Я был идиотом. Я никогда не понимал, что я пытался конвертировать JSON в нечто другое, когда мне нужны данные JSON.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString:@"https://api.parse.com/1/classes/Consoles"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setURL:url]; 
    [request setHTTPMethod:@"GET"]; 
    [request setValue:@"APPLICATION_ID" forHTTPHeaderField:@"X-Parse-Application-Id"]; 
    [request setValue:@"REST_API_KEY" forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 

    NSString *listOfConsoles = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@", listOfConsoles); 
} 
Смежные вопросы