2011-07-27 7 views
2

Iは、JSON形式で2D NSMutableArrayの換算 - JSONKit

NSMutableArray* answers; 

回答の各要素は、オブジェクトの配列自体は、以下の配列を有しています。

Iは、個々のオブジェクトは以下の構造を有する

...それはPHPアプリケーションに渡され、その後、復号化することができるように、(JSONKitフレームワークを使用して)適切なJSON形式に上記2次元配列に変換する必要があります:

@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フレームワークを使用して各回答オブジェクトの関連データをJSON形式にエンコードしてPHPアプリケーションに投稿し、デコードできるようにすることです。

本質的に私は何かが必要です:

{{"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;