1

将 NSOrderedSets 序列化和反序列化为 JSON 有哪些选择?我正在使用 iOS5/Objective-C。我想我可以自己推出,但我假设那里有一些很好的现有框架......

4

2 回答 2

3

由于 JSON 没有set数据类型,并且它Array是有序的,因此您可以转换为 NSArray第一个然后序列化,如下所示:

NSOrderedSet *os = [NSOrderedSet orderedSetWithObjects:@"1", @"2", @"3", nil];
NSArray *jsonArr = [os array];
// JSON Data
NSData *json = [NSJSONSerialization dataWithJSONObject:jsonArr options:0 error:nil];
// JSON String representation
NSString *jsonString = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];
于 2012-05-08T09:55:44.153 回答
0

您唯一的选择可能是访问 OpenSource 库并查看 JSON 序列化程序是如何实现的代码。然后,您可以根据您的目的扩展库。通过“扩展”我的意思是,您应该尽可能多地利用现有库,因为从头开始制作自己的序列化器可能需要大量工作。

通常,JSON 库定义 JSON 类型和相应的 Objective-C 类型(类)之间的映射。例如,一个 JSON 数组映射到一个 NSArray/NSMutableArray,一个 JSON 对象映射到一个 NSDictionary/NSMutableDictionary,等等。

因此,“JSON 序列化器”将“知道”如何将“映射”的 Objective-C 对象序列化为 JSON 元素。实现此行为的一种方法是将 Category 添加到映射的 Objective-C 类。

因此,当“扩展库”(取决于库和实现)时,只需为您的自定义类添加一个类别并相应地实现它就足够了。

我是 JSON 库的作者。为自定义类创建类别,然后可以在 JSON 序列化器中使用这些类别并不费力。您可以在增强请求中指定您的需求,因此我可以调整库以使其更容易添加自定义类。

您的类别如下所示:

@interface NSOrderedSet (JPJsonWriter) <JPJsonWriterInserterProtocol>
@end

@implementation NSOrderedSet (JPJsonWriter)

- (int) JPJsonWriter_insertIntoBuffer:(NSMutableDataPushbackBuffer*)buffer 
                             encoding:(JPUnicodeEncoding)encoding
                              options:(JPJsonWriterOptions)options
                                level:(NSUInteger)level
{
    return insertJsonArray(self, buffer, encoding, options, level);
}

@end

这实际上是您所要做的 - 在对我的库进行了一些调整之后。但请注意:这取决于您使用的 JSON 库。你可以在这里找到我的 JSON 库。请提交增强请求 - 谢谢。

于 2012-05-19T06:18:41.467 回答