Разобрать данные JSON, используя Asihttprequest и инфраструктуру Json для iphone - PullRequest
3 голосов
/ 07 августа 2011

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

Затем я подумал, что буду тестировать, используя службу Microsoft Odata Service для Northwind db.Вы можете просмотреть результаты 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", я получаю всю полезную нагрузку, но мне просто нужно имя продукта.

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

http://servers.odata.org/Northwind/Northwind.svc/Products(1)?$format=json

1 Ответ

3 голосов
/ 07 августа 2011

Согласно ссылке, которую вы указали , ваш 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"];
...