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

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

Жанры

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

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

Шрифт:

],

};

Как видите, в этом словаре содержатся имя, фамилия и возраст Энтони Роббинса. Ключ словаря, называемый children, содержит имена детей Энтони. Это массив строк, где каждой строкой представлен один ребенок. Итак, на данный момент переменная dictionary содержит все значения, которые мы хотели в нее поместить. Теперь нужно сериализовать ее в объект JSON:

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 = %@", jsonData);

}

else if ([jsonData length] == 0 &&

error == nil){

NSLog(@"No data was returned after serialization.");

}

else if (error!= nil){

NSLog(@"An error happened = %@", error);

}

Возвращаемым значением метода dataWithJSONObject: options: error: являются данные типа NSData. Правда, эти данные можно просто преобразовать в строку и вывести на консоль. Для этого применяется метод-инициализатор initWithData: encoding: класса NSString. Далее приведен полный пример, в котором словарь преобразуется в объект 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.");

NSString *jsonString = [[NSString alloc] initWithData: jsonData

encoding: NSUTF8StringEncoding];

NSLog(@"JSON String = %@", jsonString);

}

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;

}

Запустив это приложение, вы увидите в окне консоли следующие результаты:

Successfully serialized the dictionary into data.

JSON String = {

«Last Name»: «Robbins»,

«First Name»: «Anthony»,

«children»: [

«Anthony's Son 1»,

«Anthony's Daughter 1»,

«Anthony's Son 2»,

«Anthony's Son 3»,

«Anthony's Daughter 2»

],

«Age»: 51

}

11.10. Десериализация нотации JSON в массивы и словари

Постановка задачи

Имеются данные в формате JSON, их необходимо десериализовать в словарь или массив.

Решение

Воспользуйтесь методом JSONObjectWithData: options: error: класса NSJSONSerialization.

Обсуждение

Если вы уже сериализовали ваш словарь или массив в объект JSON (заключенный в экземпляре NSData, см. раздел 11.9), то эти данные нужно будет десериализовать обратно в словарь или массив. Это делается с помощью метода JSONObjectWithData: options: error:, относящегося к классу NSJSONSerialization. Объект, возвращаемый этим методом, будет представлять собой либо словарь, либо массив в зависимости от того, какие данные ему были переданы. Рассмотрим пример:

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

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Имя нам Легион. Том 15

Дорничев Дмитрий
15. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 15

Имперец. Том 4

Романов Михаил Яковлевич
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 4

Двойник Короля 7

Скабер Артемий
7. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 7

Изгой Проклятого Клана. Том 6

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

Гнездо Седого Ворона

Свержин Владимир Игоревич
2. Трактир "Разбитые надежды"
Фантастика:
боевая фантастика
7.50
рейтинг книги
Гнездо Седого Ворона

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Моров. Том 5

Кощеев Владимир
4. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Моров. Том 5

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Неучтенный элемент. Том 2

NikL
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 2

Травница Его Драконейшества

Рель Кейлет
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Травница Его Драконейшества

Газлайтер. Том 29

Володин Григорий Григорьевич
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 29

Старший лейтенант, парень боевой!

Зот Бакалавр
8. Героями не становятся, ими умирают
Фантастика:
боевая фантастика
5.00
рейтинг книги
Старший лейтенант, парень боевой!