我有以下数组
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”},......}
答案 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;