SBJson库解析(八)SBJsonStreamParserAdapter
json流解析配置器
1.定义了一个枚举配置器类型:
1 typedef enum {
2 SBJsonStreamParserAdapterNone,
3 SBJsonStreamParserAdapterArray,
4 SBJsonStreamParserAdapterObject,
5 } SBJsonStreamParserAdapterType;
2.定义了一个json流解析配置器代理协议:
1 /**
2 @json流解析配置器代理协议
3 从流解析配置器获得obj或array对象的代理
4 由流解析叠加器SBJsonStreamParserAccumulator实现
5 */
6 @protocol SBJsonStreamParserAdapterDelegate
7
8 /**
9 如果发现一个json数组,则调用此方法
10 */
11 - (void)parser:(SBJsonStreamParser*)parser foundArray:(NSArray*)array;
12
13 /**
14 如果发现一个json对象,则调用此方法
15 */
16 - (void)parser:(SBJsonStreamParser*)parser foundObject:(NSDictionary*)dict;
17
18 @end
3.类定义和属性:
1 @interface SBJsonStreamParserAdapter : NSObject <SBJsonStreamParserDelegate> {
2 @private
3 NSUInteger depth;
4 NSMutableArray *array;
5 NSMutableDictionary *dict;
6 NSMutableArray *keyStack;
7 NSMutableArray *stack;
8
9 SBJsonStreamParserAdapterType currentType;
10 }
11
12 /**
13 如何跳过多个层级
14 当文件太大了或链接缓慢,此方法相当有用
15 如果设置此为N,它会跳过外面的N层,为每个内层对象,直接调用-parser:foundArray:或-parser:foundObject:方法
16 */
17 @property NSUInteger levelsToSkip;
18
19 /**
20 实现SBJsonStreamParserAdapterDelegate代理协议的对象
21 */
22 @property (unsafe_unretained) id<SBJsonStreamParserAdapterDelegate> delegate;
23
24 @end
/**
默认的委托,当一个文件完全解析,只会调用一个-parser:foundArray:方法或-parser:foundObject:的方法
如果设置SBJsonStreamParser的supportMultipleDocuments属性为YES,
就可以支持多个json顶级对象的解析
例子如下:
@code
SBJsonStreamParserAdapter *adapter = [[[SBJsonStreamParserAdapter alloc] init] autorelease];
adapter.delegate = self;
SBJsonStreamParser *parser = [[[SBJsonStreamParser alloc] init] autorelease];
parser.delegate = adapter;
parser.supportMultipleDocuments = YES;
// 注意:此输入包含多个顶级json对象
NSData *json = [@"[]{}[]{}" dataWithEncoding:NSUTF8StringEncoding];
[parser parse:data];
@endcode
self调用它的顺序如下:
@li -parser:foundArray:
@li -parser:foundObject:
@li -parser:foundArray:
@li -parser:foundObject:
下面是跳过第一个或多个封装对象:
@code
SBJsonStreamParserAdapter *adapter = [[[SBJsonStreamParserAdapter alloc] init] autorelease];
adapter.delegate = self;
adapter.levelsToSkip = 1;
SBJsonStreamParser *parser = [[[SBJsonStreamParser alloc] init] autorelease];
parser.delegate = adapter;
// 注意:此输入包含一个单一的顶级json对象
NSData *json = [@"[[],{},[],{}]" dataWithEncoding:NSUTF8StringEncoding];
[parser parse:data];
@endcode
*/
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号