以JSON格式转换2D NSMutableArray - JSONKit

时间:2011-07-27 21:03:05

标签: iphone objective-c xcode json

我有以下数组

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框架将每个答案对象中的相关数据编码为JSON格式,以便它可以发布到php应用程序并解码....

基本上我需要这种形式的东西:

{{“answer”:“1”,“questionId”:“1”},{{“answer”:“5”,“questionId”:“2”},......}

2 个答案:

答案 0 :(得分:5)

与所有其他JSON框架一样,JSONKit与自定义对象不兼容。为此,您需要遍历对象并将它们放入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"}, ...]

答案 1 :(得分: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;