преобразовать Core Data NSManagedObject в JSON на iPhone? - PullRequest
4 голосов
/ 17 февраля 2011

Я должен был опубликовать некоторые из своих объектов COre Data обратно в веб-сервис и хотел бы отправить их как JSON. Я получаю объекты с сервера в формате JSON, используя эту библиотеку:

http://code.google.com/p/json-framework/

Но я не могу понять, как изменить мои объекты обратно на JSON?

Ответы [ 2 ]

4 голосов
/ 21 февраля 2011

Чтобы создать json из ваших r объектов, вы должны построить NSDictionary из вашего объекта, а затем преобразовать в строку с классом SBJsonWriter.

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObject:(NSArray *)YourArrayOfElements forKey:@"objects"];
SBJsonWriter *jsonWriter = [SBJsonWriter new];
//Just for error tracing
jsonWriter.humanReadable = YES;
NSString *json = [jsonWriter stringWithObject:jsonDictionary];
if (!json){
    NSLog(@"-JSONRepresentation failed. Error trace is: %@", [jsonWriter errorTrace]);
}
[jsonWriter release];
NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];

И тогда вы можете установить в качестве тела вашего почтового запроса.

1 голос
/ 24 февраля 2011

Если вы хотите более полнофункциональное решение, чем то, что предлагает автономная библиотека для разбора, вы можете взглянуть на RestKit: http://restkit.org/

Фреймворк оборачивает операции извлечения, анализа и отображения полезных нагрузок JSON в объекты. Это также позволяет вам обновлять удаленные представления с помощью POST / PUT'ов, возвращая объекты обратно с запросом. По умолчанию исходящие запросы кодируются в форме, но библиотека поставляется с классом для использования JSON в качестве проводного формата для отправки обратно на сервер.

На высоком уровне, вот как будут выглядеть ваши операции извлечения и публикации в RestKit:

- (void)loadObjects {
  [[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/path/to/stuff.json" delegate:self];
}

- (void)objectLoader:(RKObjectLoader*)loader didLoadObjects:(NSArray*)objects {
  NSLog(@"These are my JSON decoded, mapped objects: %@", objects);

  // Mutate and PUT the changes back to the server
  MyObject* anObject = [objects objectAtIndex:0];
  anObject.name = @"This is the new name!";
  [[RKObjectManager sharedManager] putObject:anObject delegate:self];
}

Фреймворк заботится о синтаксическом анализе / кодировании JSON в фоновом потоке и позволяет вам объявить, как атрибуты в JSON отображаются на свойства вашего объекта. Сопоставление с классами с базовыми данными полностью поддерживается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...