2 Stimmen

Konvertiere 2D NSMutableArray in JSON-Format - JSONKit

Ich habe das folgende Array

NSMutableArray* answers;

Jedes Element von answers ist selbst ein Array von Objekten.

Ich muss das obige 2D-Array in das geeignete JSON-Format konvertieren (unter Verwendung des JSONKit-Frameworks), damit es an eine php-Anwendung übergeben und anschließend decodiert werden kann...

Die einzelnen Objekte haben die folgende Struktur:

@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

Jedes Element von answers ist also ein Array von Answer-Objekten. Im Wesentlichen muss ich die relevanten Daten in jedem Antwortobjekt in das JSON-Format kodieren, sodass es an eine php-App gepostet und decodiert werden kann....

Im Wesentlichen benötige ich etwas in der Form:

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

5voto

Patrick Perini Punkte 22351

Der JSONKit, wie alle anderen JSON-Frameworks, funktioniert nicht gut mit benutzerdefinierten Objekten. Sie müssen also durch Ihr Objekt iterieren und sie in Objekte umwandeln, die der JSONKit verstehen kann (NSArrays und NSDictionaries). Etwas in dieser Art:

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];

würde Ihnen geben:

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

0voto

Joe Osborn Punkte 1145

JSONKit scheint sowohl eine delegatbasierte als auch eine blockbasierte Methode zum Serialisieren von nicht unterstützten Objekttypen anzubieten. Meine Vermutung, ohne das Framework verwendet zu haben, ist, dass Sie eine dieser Versionen der Serialisierungsmethoden aufrufen und ein Delegat/Selektor-Paar oder einen Block übergeben, der anstelle eines nicht unterstützten Objekttyps ein JSON-serialisierbares Objekt zurückgibt.

Sie benötigen eine dieser Kategoriemethoden auf 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;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X