SBJson库解析(七)SBJsonStreamParser
json数据流解析器
1.定义了一个枚举值表示解析状态:
1 typedef enum {
2 SBJsonStreamParserComplete,
3 SBJsonStreamParserWaitingForData,
4 SBJsonStreamParserError,
5 } SBJsonStreamParserStatus;
2.定义了一个json流解析代理协议:
1 /**
2 由SBJsonStreamParserAdapter类实现
3 */
4 @protocol SBJsonStreamParserDelegate
5
6 //当找到obj时调用
7 - (void)parserFoundObjectStart:(SBJsonStreamParser*)parser;
8
9 //当找到obj对象key时调用
10 - (void)parser:(SBJsonStreamParser*)parser foundObjectKey:(NSString*)key;
11
12 //当obj结束时调用
13 - (void)parserFoundObjectEnd:(SBJsonStreamParser*)parser;
14
15 //当找到array对象时调用
16 - (void)parserFoundArrayStart:(SBJsonStreamParser*)parser;
17
18 //当array对象结束时调用
19 - (void)parserFoundArrayEnd:(SBJsonStreamParser*)parser;
20
21 //当找到boolean值时调用
22 - (void)parser:(SBJsonStreamParser*)parser foundBoolean:(BOOL)x;
23
24 //当找到null时调用
25 - (void)parserFoundNull:(SBJsonStreamParser*)parser;
26
27 //当找到number时调用
28 - (void)parser:(SBJsonStreamParser*)parser foundNumber:(NSNumber*)num;
29
30 //当找到字符串对象时调用
31 - (void)parser:(SBJsonStreamParser*)parser foundString:(NSString*)string;
32
33 @end
3.属性和声明的方法:
1 /**
2 @json数据流解析器
3 把json数据流解析成NSArray或NSDictionary对象
4 使用这个类,可以边下载边解析(在整个文件被全部下载之前进行解析)
5 用这个类对磁盘上的大文件解析也有好处,不用全部加载到内存
6 具体实现可查看SBJsonStreamParserAdapter类
7 */
8 @interface SBJsonStreamParser : NSObject {
9 @private
10 SBJsonTokeniser *tokeniser;
11 }
12
13 @property (nonatomic, unsafe_unretained) SBJsonStreamParserState *state; // Private
14 @property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Private
15
16 /**
17 是否用空格隔开多个文件
18 当设置为YES,解析器就不会返回SBJsonStreamParserComplete
19 默认为NO,一但返回SBJsonStreamParserComplete,解析器不会解析更多数据
20 */
21 @property BOOL supportMultipleDocuments;
22
23 /**
24 @流解析代理对象
25 通常是指SBJsonStreamParserAdapter
26 也可以是实现了SBJsonStreamParserDelegate解析代理协议的任何对象
27 */
28 @property (unsafe_unretained) id<SBJsonStreamParserDelegate> delegate;
29
30 /**
31 @最大递归深度,默认为32
32 如果嵌套的太深,大于32被视为恶意解析,返回nil,并发送一个错误信号
33 */
34 @property NSUInteger maxDepth;
35
36 //保存BJsonStreamParserError后返回的错误信息
37 @property (copy) NSString *error;
38
39 /**
40 解析json数据
41 参数是UTF8编码的json数据(NSData)
42 返回一个枚举值,流解析状态:
43 SBJsonStreamParserComplete表示:解析了全部数据
44 SBJsonStreamParserWaitingForData表示:等待获得更多数据
45 SBJsonStreamParserError表示:解析出错
46 */
47 - (SBJsonStreamParserStatus)parse:(NSData*)data;
48
49 @end

浙公网安备 33010602011771号