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