在iOS开发中,数据解析转化方面有许多比较好用的框架,如MjExtension,自己以前写过一个数据解析框架,今天就简单的总结一下。
数据解析,无非就是数据的转化,我这个框架主要用处就是将从网络请求来的数据转化为模型类的对象格式,还是就是将代码中的模型对象转化为json数据,这个常用于发送post请求。
项目的代码将会托管到github上,需要的可以去下载。也可以留言提意见。
下载完项目后,打开,框架就在JsonAgent文件夹,主要分为两个大类SYYJSonToObjectBuilder和SYYJSonPersistBuilder,对应的用途如名字。
一.json数据解析为对象
框架实现的原理就是kvo转化。实现步骤如下
1. CREATE_JSON_TO_OBJECT_BUILDER(builder) 创建构造器
2. SET_BUILDER_CONTAINER(builder, className) 为构造器设置键值
3. SET_BUILDER_RESOURCE(builder, resource) 为构造器设置资源
4. ADD_BUILDER_RESOURCE_PROCESSOR(builder, class, key) 填写对应键值在资源中的key
5. GET_RESULT(builder) 输出对象
容器类遵循SYYJSonAbstractBuilderInterface.h协议,协议里有增加,删除属性的方法,可以对类属性做处理,demo里并没有做类似的封装,感兴趣的同学可以自己实现。为构造器设置键值,就是针对数据的最外层键值进行指定,然后对构造器指定资源,资源一般的字典数据类型,然后指定资源中键值,如测试数据中的paogrammers,authors,musicians,最后是就是解析,解析过程就是通过一层层进行遍历,通过kvo赋值,如果是数组类型或者字典类型,会进一步做遍历,直至遍历到我们指定类,即我们要最终转化的类型,从而得到最终的模型对象。
如下图所示:是解析出的结果,可以看到,传入的json数据已经转化为我们demo里定义的类型
二. 类对象转化为json数据
步骤如下:先创建解析器, SYYJSonAbstractBuilder 是遵循SYYJSonAbstractBuilderInterface协议的,声明资源类型,将对象传入声明资源中,将资源放入转化器中,最后进行转化。步骤很简单,就不多解释了。
SYYJSonAbstractBuilder* decode_builder = [[SYYJSonPersistBuilder alloc]init];
SYYJSONBUILDER_VAR_TYPE decode_resource;
decode_resource.instance_ = self.object;
[decode_builder setBuilderResource:decode_resource];
NSString* jsonString = [decode_builder getResult];
最终效果如下所示:
网友评论