2011-07-27 20 views
2

我有以下陣列將2D的NSMutableArray JSON格式 - JSONKit

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 

這就是說,答案的每個元素都是應答對象數組。基本上就是我需要的是在每個答案對象爲使用JSONKit框架,以便它可以被髮布到一個PHP應用程序和解碼JSON格式編碼的相關數據....

基本上我需要形式的財產以後:

{{「answer」:「1」,「questionId」:「1」},{{「answer」:「5」,「questionId」:「2」},......}

回答

5

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

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;