@"Anthony's Daughter 2"

],

};

Как видите, в этом словаре содержатся имя, фамилия и возраст Энтони Роббинса. Ключ словаря, называемый 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

}

<p>11.10. Десериализация нотации JSON в массивы и словари</p><p>Постановка задачи</p>

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

<p>Решение</p>

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

<p>Обсуждение</p>
Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги