Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:
empty-line/>

/* Сейчас попытаемся сериализовать объект 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 в противоположность изменяемому массиву или словарю;

Поделиться:
Популярные книги

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Кодекс Охотника. Книга XXXVIII

Винокуров Юрий
38. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
юмористическое фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVIII

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Месть Паладина

Юллем Евгений
5. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Месть Паладина

Спасите меня, Кацураги-сан! Том 12

Аржанов Алексей
12. Токийский лекарь
Фантастика:
попаданцы
дорама
фэнтези
5.00
рейтинг книги
Спасите меня, Кацураги-сан! Том 12

"Новый Михаил-Империя Единства". Компиляцияя. Книги 1-17

Марков-Бабкин Владимир
Избранные циклы фантастических романов
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Новый Михаил-Империя Единства. Компиляцияя. Книги 1-17

Треск штанов

Ланцов Михаил Алексеевич
6. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Треск штанов

Идеальный мир для Демонолога 13

Сапфир Олег
13. Демонолог
Фантастика:
героическая фантастика
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Идеальный мир для Демонолога 13

Герцог. Книга 1. Формула геноцида

Юллем Евгений
1. Псевдоним "Испанец" - 2
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Герцог. Книга 1. Формула геноцида

Точка Бифуркации VIII

Смит Дейлор
8. ТБ
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации VIII

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Мечник Вернувшийся 1000 лет спустя. Том 2

Ткачев Андрей Юрьевич
2. Вернувшийся мечник
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Мечник Вернувшийся 1000 лет спустя. Том 2

Черные ножи 2

Шенгальц Игорь Александрович
2. Черные ножи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черные ножи 2

Лекарь Империи 6

Карелин Сергей Витальевич
6. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 6