Я пытался найти наиболее эффективный способ преобразования ответа JSON в пригодный для использования массив, на который можно ссылаться как на источник данных UITableView.Пример здесь взят из бесплатного сервиса погоды World Weather Online.
У меня нет проблем с преобразованием JSON с использованием метода Jonathan Wights TouchJSON , но теперь у меня естьNSarray из NSDictionaries Я не могу найти эффективный способ перемещения данных в массив, кроме как грубой силой.То есть я могу получить любое значение из вложенных NSDictionaries, но единственный способ создать пригодный для использования массив - это взять каждое значение по отдельности и поместить его в нужное место в моем массиве.Я могу сделать это с помощью отдельного объекта, который создает массив со строками, представляющими каждое из значений в JSON-ответе, но должен быть лучший способ сделать это, чем использовать грубую силу.
Когда япопробуйте рекомендованные методы, которые я получаю «данные» в качестве ключа, а остальные выходные данные в качестве значения.Затем я создаю новый словарь objectforkey: @ "data", и он дает мне только массив из 4-х ключей "near_area", "current_condition", "weather" и "request".И если я пытаюсь создать новый NSDictionary из только что созданного NSDictionary, он выдаст мне ошибку.
Есть ли способ взять вложенные NSDictionaries и поместить ключи и значения во вложенном NSDictionary в nsarray?
Вот код
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *webResult = [[NSString alloc] initWithData:receivedWeatherData encoding:NSUTF8StringEncoding];
NSError *theError = NULL;
receivedDictionary = [NSMutableDictionary dictionaryWithJSONString:webResult error:&theError];
NSLog(@"\n%@\n",receivedDictionary);
Вот вывод, преобразованный в NSArray NSDictionarys
{
data = {
"current_condition" = (
{
cloudcover = 50;
humidity = 44;
"observation_time" = "01:24 AM";
precipMM = "0.0";
pressure = 1000;
"temp_C" = 14;
"temp_F" = 57;
visibility = 10;
weatherCode = 116;
weatherDesc = (
{
value = "Partly Cloudy";
}
);
weatherIconUrl = (
{
value = "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png";
}
);
winddir16Point = NW;
winddirDegree = 310;
windspeedKmph = 20;
windspeedMiles = 13;
}
);
"nearest_area" = (
{
areaName = (
{
value = Hobart;
}
);
country = (
{
value = Australia;
}
);
latitude = "-42.920";
longitude = "147.330";
population = 204863;
region = (
{
value = Tasmania;
}
);
weatherUrl = (
{
value = "http://free.worldweatheronline.com/weather/Australia/106511/Hobart/110625/info.aspx";
}
);
}
);
request = (
{
query = "Lat -42.92 and Lon 147.33";
type = LatLon;
}
);
weather = (
{
date = "2011-09-20";
precipMM = "2.4";
tempMaxC = 12;
tempMaxF = 54;
tempMinC = 7;
tempMinF = 45;
weatherCode = 116;
weatherDesc = (
{
value = "Partly Cloudy";
}
);
weatherIconUrl = (
{
value = "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png";
}
);
winddir16Point = W;
winddirDegree = 277;
winddirection = W;
windspeedKmph = 23;
windspeedMiles = 14;
}
);
};
}