SBJson库解析(四)SBJsonStreamWriter

json流编写器

允许传入一个消息流对象,把它写入到SBJsonStreamWriterAccumulatordata.

1.里面含有个新的NSObject类别,把objc对象转成json允许的对象类型

 1 @interface NSObject (SBProxyForJson)
2
3 /**
4 json只支持NSArray和NSDictionary等类型
5 所以转换之前先把特定objc对象转成这两种类型的形式
6 如果你有一个自定义类,要把它转成json,需要实现该方法
7 例子如下:
8 @code
9 - (id)proxyForJson {
10 return [NSDictionary dictionaryWithObjectsAndKeys:
11 name, @"name",
12 phone, @"phone",
13 email, @"email",
14 nil];
15 }
16 @endcode
17 */
18
19 - (id)proxyForJson;
20
21 @end

2.里面定义了个json流编写器代理协议:

1 //在json流编写叠加器SBJsonStreamWriterAccumulator里实现
2 @protocol SBJsonStreamWriterDelegate
3
4 - (void)writer:(SBJsonStreamWriter*)writer appendBytes:(const void *)bytes length:(NSUInteger)length;
5
6 @end

3.定义了一个私有属性:

NSMutableDictionary *cache;

4.定义了7个公有属性:

 1 @property (nonatomic, unsafe_unretained) SBJsonStreamWriterState *state; // Internal
2 @property (nonatomic, readonly, strong) NSMutableArray *stateStack; // Internal
3
4 //json输出流的代理
5 @property (unsafe_unretained) id<SBJsonStreamWriterDelegate> delegate;
6
7 /**
8 @最大递归深度,默认为512.
9 如果嵌套的太深,大于32被视为恶意解析,返回nil,并发送一个错误信号
10 可以通过设置maxDepth为0,来取消此安全功能
11 */
12 @property NSUInteger maxDepth;
13
14 /**
15 @是否为人类可读的json
16 默认为NO,产生的json没有任何空白
17 如果设为YES,换行后,每个数组值和字典键/值对缩进两个空格
18 */
19 @property BOOL humanReadable;
20
21 /**
22 @输出时字典键是否排序
23 默认为NO,如果设为YES,排序json输出的字典键
24 如果你需要比较两个结构时候很有用
25 */
26 @property BOOL sortKeys;
27
28 /**
29 @返回一个出错信息,如果没错误,返回为nil
30 */
31 @property (copy) NSString *error;

5.定义了10个公有方法:

 1 /**
2 把NSDictionary对象写到JSON输出流
3 返回YES,表示成功
4 */
5 - (BOOL)writeObject:(NSDictionary*)dict;
6
7 /**
8 把NSArray对象写入JSON输出流
9 返回YES,表示成功
10 */
11 - (BOOL)writeArray:(NSArray *)array;
12
13 /**
14 开始写一个obj对象到JSON输出流
15 返回YES,表示成功
16 */
17 - (BOOL)writeObjectOpen;
18
19 /**
20 结束写obj对象到JSON输出流
21 返回YES,表示成功
22 */
23 - (BOOL)writeObjectClose;
24
25 /**
26 开始写一个Array对象到JSON输出流
27 返回YES,表示成功
28 */
29 - (BOOL)writeArrayOpen;
30
31 /**
32 结束写Array对象到JSON输出流
33 返回YES,表示成功
34 */
35 - (BOOL)writeArrayClose;
36
37 /**
38 把null对象写入JSON输出流
39 返回YES,表示成功
40 */
41 - (BOOL)writeNull;
42
43 /**
44 把boolean对象写入JSON输出流
45 返回YES,表示成功
46 */
47 - (BOOL)writeBool:(BOOL)x;
48
49 /**
50 把Number对象写入JSON输出流
51 返回YES,表示成功
52 */
53 - (BOOL)writeNumber:(NSNumber*)n;
54
55 /**
56 把String对象写入JSON输出流
57 返回YES,表示成功
58 */
59 - (BOOL)writeString:(NSString*)s;

6.有个类别,定义了两个私有方法:

1 @interface SBJsonStreamWriter (Private)
2 - (BOOL)writeValue:(id)v;
3 - (void)appendBytes:(const void *)bytes length:(NSUInteger)length;
4 @end







posted @ 2012-02-20 12:02  月光的尽头  阅读(2141)  评论(0)    收藏  举报