Разобрать данные JSON, используя Asihttprequest и инфраструктуру Json для iphone

Я изучал, как анализировать JSON, используя инфраструктуру JSON и ASIHTTPRequest для iOS. Я протестировал использование твиттер-фидов, а также пользовательский фид через урок сообщества. Все идет хорошо.

Затем я подумал, что буду тестировать с помощью службы Microsoft Odata Service для базы данных Northwind. Вы можете просмотреть результаты JSON здесь:

http://jsonviewer.stack.hu/#http://services.odata.org/Northwind/Northwind.svc/Products%281%29?$format=json

Теперь я изо всех сил пытаюсь понять, как разобрать только название продукта. Может кто-то указать мне верное направление?

По моей просьбе Закончено у меня есть это:

- (void)requestFinished:(ASIHTTPRequest *)request
{    
    [MBProgressHUD hideHUDForView:self.view animated:YES];
    NSString *responseString = [request responseString];
    NSDictionary *responseDict = [responseString JSONValue];

    //find key in dictionary
    NSArray *keys = [responseDict allKeys];

    NSString *productName = [responseDict valueForKey:@"ProductName"];
    NSLog(@"%@",productName);
}

В журнале у меня ноль.

Если я изменю значение для ключа на @"d" Я получаю всю полезную нагрузку, но я просто хочу productName.

URL службы, который я использую:

http://servers.odata.org/Northwind/Northwind.svc/Products%281%29?%24format=json

1 ответ

Решение

По предоставленной вами ссылке ваш JSON имеет следующий формат:

{
  "d": {
    ...
    "ProductName": "Chai",
    ...
  }
}

На верхнем уровне у вас есть только один ключ: "d", Если вы делаете это:

NSString *productName = [responseDict valueForKey:@"ProductName"];

Он вернется nil, Вам нужно углубиться в иерархию:

NSDictionary *d = [responseDict valueForKey:@"d"];
NSString *productName = [d valueForKey:@"ProductName"];

Или просто:

NSString *productName = [responseDict valueForKeyPath:@"d.ProductName"];
Другие вопросы по тегам