Синтаксический анализ JSON с использованием SBJSON, проблема

#ios #objective-c #json #xcode

#iOS #objective-c #json #xcode

Вопрос:

Я получаю ответ JSON в прогнозируемой форме. так что дерево выглядит следующим образом:

 { "data":{
           "img":"image":"http://testingpage.com/images/frog_320x480_23.jpg",      
           "link":"http://google.com","verbose":"Hi there"}, 
           "figures":[ 
                       { "ID":"16","TYPE":"sailor","COLOR":"1E90FFFA","ICON":"sailor"},
                       {"ID":"32","TYPE":"pilot","COLOR":"32CD32BC","ICON":"pilot"}
                     ]
          }
}
  

Я использую библиотеку SBJSON.
Я получаю свои значения с помощью

NSString *jsonString = [[NSString alloc] initWithData:кодировка iData:NSUTF8StringEncoding]; NSDictionary *результаты = [jsonString JsonValue];

и получение нужных мне ключей с помощью:

результат objectForKey:@»keyname»]

пока все хорошо.

Только что произошло то, что я получаю ответ от другого провайдера, и результат совершенно другой по своей природе:

 [
     { "TEMPValues": {
                   "temp1": 13.2,
                   "temp2":11.1, 
                   "temp3":11.2,
                   "temp4":13.4
                 }, 
       "semipath":"pollution", 
       "value":"AXT" 
      },
      { "TEMPValues": {
                   "temp1":19.3,
                   "temp2":12.1, 
                   "temp3":10.8,
                   "temp4":13.1}, 
        "semipath":"pollution",
        "value":"AUT"
      }
]
  

Здесь у меня две проблемы:

  1. Я не знаю, как получить доступ к этим значениям, поскольку они находятся в корне, массиве. и в этом массиве нет ключа, на который я мог бы ссылаться. Итак, каким должен быть подход к такой структуре? Если мне нужно получить temp1 первый объект TEMPValues в массиве.

  2. Всякий раз, когда я пытаюсь получить значение, используя results objectForKey:@"keyname"] , я получаю SIGABRT, потому results что распознается массив

Ответ №1:

Сначала создайте массив значений

 NSArray *results = (NSArray *)[jsonString JSONValue];
  

После этого выполните итерацию этого массива

 for(int i= 0; i < results.count; i  ) {
    NSDictionary *dic = (NSDictionary *)[results objectAtIndex:i];
}
  

Ответ №2:

Вы должны сделать подобное.

   -(void) retrieveData{
       NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"yoururl"]];

      [request setHTTPMethod:@"GET"];

      [request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"TEMPValues"];

      NSError *err;

      NSURLResponse *response;

      NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:amp;response error:amp;err];

      NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:responseData options: NSJSONReadingMutableContainers error: amp;err];


     variable=[[jsonArray objectAtIndex:0]objectForKey:@"keyname"];
   }