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 в противоположность изменяемому массиву или словарю;
Поделиться:
Популярные книги
Шайтан Иван 2
2. Шайтан Иван
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Наследник старого рода
1. Живой лёд
Фантастика:
фэнтези
8.19
рейтинг книги
Аргумент барона Бронина 2
2. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Третье правило дворянина
3. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Убивать чтобы жить 3
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
СД. Том 15
15. Сердце дракона
Фантастика:
героическая фантастика
боевая фантастика
6.14
рейтинг книги
Жена неверного маршала, или Пиццерия попаданки
Любовные романы:
любовно-фантастические романы
4.25
рейтинг книги
Мымра!
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Идеальный мир для Лекаря 12
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Оцифрованный. Том 1
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Элита элит
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Хуррит
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Шаман. Похищенные
1. Шаман
Фантастика:
боевая фантастика
попаданцы
6.44
рейтинг книги
Курсант: Назад в СССР 4
4. Курсант
Фантастика:
попаданцы
альтернативная история
7.76