Разобрать данные JSON, используя Asihttprequest и инфраструктуру Json для iphone
Я изучал, как анализировать JSON, используя инфраструктуру JSON и ASIHTTPRequest для iOS. Я протестировал использование твиттер-фидов, а также пользовательский фид через урок сообщества. Все идет хорошо.
Затем я подумал, что буду тестировать с помощью службы Microsoft Odata Service для базы данных Northwind. Вы можете просмотреть результаты 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"];