Конвертировать 2D NSMutableArray в формат JSON - JSONKit - PullRequest
2 голосов
/ 28 июля 2011

У меня есть следующий массив

NSMutableArray* answers;

Каждый элемент ответов сам по себе является массивом объектов.

Мне нужно преобразовать вышеуказанный 2D-массив в соответствующий формат JSON (с использованием инфраструктуры JSONKit), чтобы он мог быть передан в приложение php и впоследствии декодирован ...

Отдельные объекты имеют следующую структуру:

@interface Answer : NSObject {
    //NSString* answerId;
    NSString* answer;
    NSString* questionId;
}

//@property (nonatomic, retain) NSString* answerId;
@property (nonatomic, retain) NSString* answer;
@property (nonatomic, retain) NSString* questionId;

@end

То есть каждый элемент ответов является массивом объектов ответа. по сути, мне нужно закодировать соответствующие данные в каждом объекте ответа в формат JSON с использованием инфраструктуры JSONKit, чтобы их можно было опубликовать в приложении php и декодировать ....

По сути, мне нужно что-то в форме:

{{"answer": "1", "questionId": "1"}, {{"answer": "5", "questionId": "2"}, ......}

Ответы [ 2 ]

5 голосов
/ 28 июля 2011

JSONKit, как и все другие JSON-фреймворки, плохо работает с пользовательскими объектами.Для этого вам нужно перебрать свой объект и поместить их в объекты, которые может понять JSONKit (NSArrays и NSDictionaries).Примерно так:

NSMutableArray *jAnswers = [[[NSMutableArray alloc] init] autorelease];
for(Answer *answ in answers)
{
    NSMutableDictionary *jAnswer = [[[NSMutableDictionary alloc] init] autorelease];
    [jAnswer addObject: answ.answer forKey: @"answer"];
    [jAnswer addObject: answ.questionId forKey: @"questionId"];
    [jAnswers addObject: jAnswer];
}

NSString *jAnswersJSONFormat = [jAnswers JSONString];

даст вам:

[{"answer": "1", "questionId": "1"}, {"answer": "5", "questionId": "2"}, ...]
0 голосов
/ 29 июля 2011

JSONKit предлагает как основанный на делегатах, так и основанный на блоках метод для сериализации неподдерживаемых типов объектов. Я полагаю, что, не используя каркас, вы вызываете одну из этих версий методов сериализации и передаете пару делегат / селектор или блок, который возвращает JSON-сериализуемый объект вместо неподдерживаемого типа объекта.

Вам понадобится один из этих методов категории на NSArray:

- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error;
- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...