#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"
}
]
Здесь у меня две проблемы:
-
Я не знаю, как получить доступ к этим значениям, поскольку они находятся в корне, массиве. и в этом массиве нет ключа, на который я мог бы ссылаться. Итак, каким должен быть подход к такой структуре? Если мне нужно получить
temp1
первый объектTEMPValues
в массиве. -
Всякий раз, когда я пытаюсь получить значение, используя
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"];
}