iOS. Приемы программирования
Шрифт:
/* Сейчас попытаемся сериализовать объект JSON в словарь. */
error = nil;
id jsonObject = [NSJSONSerialization
JSONObjectWithData: jsonData
options: NSJSONReadingAllowFragments
error:&error];
if (jsonObject!= nil &&
error == nil){
NSLog(@"Successfully deserialized…");
if ([jsonObject isKindOfClass: [NSDictionary class]]){
NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
NSLog(@"Deserialized JSON Dictionary = %@", deserializedDictionary);
}
else if ([jsonObject isKindOfClass: [NSArray class]]){
NSArray *deserializedArray = (NSArray *)jsonObject;
NSLog(@"Deserialized JSON Array = %@", deserializedArray);
}
else {
/* Был возвращен какой-то другой объект. Мы не знаем,
что делать в этой ситуации, так как десериализатор
возвращает только словари или массивы. */
}
}
else if (error!= nil){
NSLog(@"An error happened while deserializing the JSON data.");
}
Если теперь объединить этот код с кодом из раздела 8.9, то можно будет сначала сериализовать словарь в объект JSON, десериализовать объект JSON обратно в словарь, а потом вывести результаты на консоль, чтобы убедиться, что все работает нормально:
— (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSDictionary *dictionary =
@{
@"First Name": @"Anthony",
@"Last Name": @"Robbins",
@"Age": @51,
@"Children": @[
@"Anthony's Son 1",
@"Anthony's Daughter 1",
@"Anthony's Son 2",
@"Anthony's Son 3",
@"Anthony's Daughter 2",
],
};
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization
dataWithJSONObject: dictionary
options: NSJSONWritingPrettyPrinted
error:&error];
if ([jsonData length] > 0 &&
error == nil){
NSLog(@"Successfully serialized the dictionary into data.");
/* Сейчас попытаемся сериализовать объект JSON в словарь. */
error = nil;
id jsonObject = [NSJSONSerialization
JSONObjectWithData: jsonData
options: NSJSONReadingAllowFragments
error:&error];
if (jsonObject!= nil &&
error == nil){
NSLog(@"Successfully deserialized…");
if ([jsonObject isKindOfClass: [NSDictionary class]]){
NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
NSLog(@"Deserialized JSON Dictionary = %@", deserializedDictionary);
}
else if ([jsonObject isKindOfClass: [NSArray class]]){
NSArray *deserializedArray = (NSArray *)jsonObject;
NSLog(@"Deserialized JSON Array = %@", deserializedArray);
}
else {
/* Был возвращен какой-то другой объект. Мы не знаем, что делать
в этой ситуации, так как десериализатор возвращает только словари
или массивы. */
}
}
else if (error!= nil){
NSLog(@"An error happened while deserializing the JSON data.");
}
}
else if ([jsonData length] == 0 &&
error == nil){
NSLog(@"No data was returned after serialization.");
}
else if (error!= nil){
NSLog(@"An error happened = %@", error);
}
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
// Точка переопределения для дополнительной настройки после запуска приложения
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
Параметр options метода JSONObjectWithData: options: error: принимает одно или несколько следующих значений:
• NSJSONReadingMutableContainers — словарь или массив, возвращенный методом JSONObjectWithData: options: error:, будет изменяемым. Иными словами, этот метод будет возвращать либо экземпляр NSMutableArray, либо экземпляр NSMutableDictionary в противоположность изменяемому массиву или словарю;
Поделиться:
Популярные книги
Газлайтер. Том 21
21. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Контрольный поцелуй
8. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
9.15
рейтинг книги
Аспирант
3. Рунный маг
Фантастика:
боевая фантастика
4.50
рейтинг книги
Почем цветочек аленький?
Женщина-цунами
Детективы:
иронические детективы
7.88
рейтинг книги
Тринадцатый VII
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возлюби болезнь свою
Научно-образовательная:
психология
7.71
рейтинг книги
Завещание
Детективы:
триллеры
7.00
рейтинг книги
Эволюционер из трущоб. Том 8
8. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Солдат Империи
1. Страж
Фантастика:
попаданцы
альтернативная история
6.67
рейтинг книги
Хроники Тириса. Книга 3
3. Хроники Тириса
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
5.00
рейтинг книги
Хозяин Стужи 5
5. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
6.60
рейтинг книги
Эйзенштейн
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Поход
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Князь Андер Арес 3
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00